在struts2如何实现拦截器和配置过程

//在struts2如何实现拦截器
    * 定义需求
       * 如果用于已经登陆,可以访问action中的save()方法
       * 如果用户没有登陆,则不能访问action中的save方法
          模拟:session.setAttriute("user","user")
   
    
    * 定义拦截器
                /*
				 * struts2中的拦截器是单实例运行
				 */
				@SuppressWarnings("serial")
				public class PerssionInterceptor implements Interceptor {
					public PerssionInterceptor(){
						System.out.println("PerssionInterceptor 拦截器的构造方法");
					}
					
					//初始化方法,在拦截器的声明周期中,该方法执行一次
					public void init() {
				       System.out.println("PerssionInterceptor init");
					}
				
				    /**
				     * 在拦截器的声明周期中,该方法执行多次
				     *   ActionInvocation: 代表一个给定动作的执行状态, 拦截器可以从该类的对象里获得与该动作相关联的 Action 对象和 Result 对象
				     *     * 由struts2创建,在运行时注入
				     */
					public String intercept(ActionInvocation invocation) throws Exception {
						//请求的UserAction对象
						System.out.println("invocation.getAction() "+invocation.getAction());
						//请求的UserAction对象的代理对象
						System.out.println("invocation.getProxy().getAction() "+invocation.getProxy().getAction());
						//访问的action中的方法  svae
						System.out.println("invocation.getProxy().getMethod() "+invocation.getProxy().getMethod());
						//访问的action所在的命名空间 /aop
						System.out.println("invocation.getProxy().getNamespace() "+invocation.getProxy().getNamespace());
						
						//获取session
						Map sessionMap=invocation.getInvocationContext().getSession();
				
						//从session中获取user
				        Object user=sessionMap.get("user");
				
						//如果user==null
				         if(user==null){
				           //转到没有权限的页面
				            return "error";
				          }
						
						 //真正调用action的save方法
				         String resultValue=invocation.invoke();
						 System.out.println("resultValue   "+resultValue); 
						 return resultValue;
					}
					
					//销毁方法,在拦截器的声明周期中,该方法执行一次
					public void destroy() {
						 System.out.println("PerssionInterceptor destroy");
					}
				}
        
     * 让拦截器运行
        * 在struts_aop.xml文件配置拦截器 
            <interceptors>
	            <!-- 声明自定义的拦截器 -->
	            <interceptor name="perssionInterceptor" class="cn.itcast.aop.PerssionInterceptor" />
	          
	            <!-- 定义新的拦截器栈 -->
	            <interceptor-stack name="perssionStack">
	                <!-- 引用默认栈--> 
	                <interceptor-ref name="defaultStack"/>
	                <!-- 增加自定义的拦截器 -->
	                <interceptor-ref name="perssionInterceptor"/>
	            </interceptor-stack>
            </interceptors>
         
            <!--struts2执行时,真正要执行的拦截器栈-->
            <default-interceptor-ref name="perssionStack"/>  

     * 测试运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值