当前位置: 首页 > news >正文

【Struts2学习笔记(10)】自定义拦截器管理权限访问


(1)拦截器的功能什么的都不说了直接上代码来的直接些:

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:


下面自定义一个拦截器:

package cn.lc.interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class PermissionInterceptor implements Interceptor
{

	public void destroy()
	{
	}
	public void init()
	{
	}
	public String intercept(ActionInvocation invocation) throws Exception
	{
		Object user = ActionContext.getContext().getSession().get("user");
		if (user != null)
		{
			return invocation.invoke(); // 如果user不为null,代表用户已经登录,允许执行action中的方法
		}
		ActionContext.getContext().put("message", "你没有权限执行该操作");
		return "success";
	}

}


Action的代码:

package cn.itcast.action;

public class HelloWorldAction {	
	private String message;
	
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String addUI(){
		this.message = "addUI";
		return "success";
	}

	public String execute() throws Exception{
		this.message = "execute";
		return "success";
	}
}


struts.xml文件配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.action.extension" value="do,action" />
	<constant name="struts.multipart.maxSize" value="10701096" />

	<package name="employee" namespace="/control/employee" extends="struts-default">
		<interceptors>
			<interceptor name="permission" class="cn.itcast.interceptor.PermissionInterceptor" />
			<interceptor-stack name="permissionStack">
				<!-- 系统的拦截器放在前面 自己定义的放在后面 -->
				<interceptor-ref name="defaultStack" />
				<interceptor-ref name="permission" />
			</interceptor-stack>
		</interceptors>
		<!-- 定义默认的拦截器 可以让action一方面使用改默认的拦截器  还可以使用系统自带的拦截器 -->
		<default-interceptor-ref name="permissionStack" />
		
		<global-results>
			<result name="success">/WEB-INF/page/message.jsp</result>
		</global-results>
		<!-- 使用下边的方法,这样的话会覆盖默认拦截器中的拦截器栈等功能 -->

		<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
			
		</action>

	</package>
</struts>


二、过程如下:

1.当表单进行提交的时候:

<form action="<%=request.getContextPath()%>/control/employee/list_execute.action" method="post">
   		id:<input type="text" name="person.id"><br/>
   		name:<input type="text" name="person.name"><br/>
   		<input type="submit" value="发送"/>
   </form>

2.找到struts.xml文件中的action 匹配到 list_*处,虽然此action中没有拦截器

(正常的配置应该是这样的

<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
		<result name="success">/WEB-INF/page/hello.jsp</result>
		<interceptor-ref name="permissionStack"/>
</action>

3.但是我们有默认的拦截器,这样的话我们不仅可以使用自定义的拦截器 还可以使用系统自带的拦截器!实现了拦截功能!

	<default-interceptor-ref name="permissionStack" />


注意:(1)因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。

(2)如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-ref name=“permissionStack”/>把拦截器定义为默认拦截器。(每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。)




注:转载请注明出处!


相关文章:

  • 大型网站提速方案
  • 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的所有方法进行输入校验
  • 分享一百多套开发视频教程的下载地址
  • java中Object类 源代码详解
  • 史上最全Java学习视频下载地址分享
  • MySql 查询一周内最近7天记录
  • 【Struts2学习笔记(12)】Struts2国际化
  • 【Struts2学习笔记(13)】Struts2中OGNL详解
  • 【Struts2学习笔记(14)】Struts2标签元素
  • SSH2框架搭建Jar下载地址
  • hibernate.cfg.xml文件的配置模板和不同数据库的配置参数
  • EasyUI - LinkButton 按钮控件
  • Hibernate常见问题 No row with the given identifier exists问题的原因及解决
  • 最小的n个数(堆排序)
  • Hibernate核心类和接口详细介绍
  • 2018一半小结一波
  • Flex布局到底解决了什么问题
  • javascript 总结(常用工具类的封装)
  • js 实现textarea输入字数提示
  • Laravel Mix运行时关于es2015报错解决方案
  • LeetCode算法系列_0891_子序列宽度之和
  • Redis 懒删除(lazy free)简史
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Tornado学习笔记(1)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 关于for循环的简单归纳
  • 前端js -- this指向总结。
  • 深入 Nginx 之配置篇
  • 我从编程教室毕业
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • python最赚钱的4个方向,你最心动的是哪个?
  • 阿里云API、SDK和CLI应用实践方案
  • ​ssh免密码登录设置及问题总结
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (十一)手动添加用户和文件的特殊权限
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Windows2003安全设置/维护
  • (转)程序员疫苗:代码注入
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET中的十进制浮点类型,徐汇区网站设计
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • [Android 13]Input系列--获取触摸窗口
  • [bzoj2957]楼房重建
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
  • [CISCN2019 华东北赛区]Web2
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [HXPCTF 2021]includer‘s revenge
  • [Invalid postback or callback argument]昨晚调试程序时出现的问题,MARK一下