拦截器再应用学习

拦截器再应用学习

拦截器
如果用户登录后可以访问action中的所有方法
user.jsp{
request.getSession().setAttribute(
" user " " itcast " );
// 专门设置用户是否登录状态,session来专门标注用户是否登录
}
退出登录
quit.jsp{
request.getSession().removeAttribute(
" user " );
// 将session去掉就行了..
}
如果用户没有登录不允许访问action中的方法,并且提示

1 .定义拦截器
1 .1实现com.opensymphony.xwork2.ActionInvocation.Interceptor接口
    @Override
    
public   void  destroy() { // 当此类被摧毁的时候执行
        
    }

    @Override
    
public   void  init() { // 实例化自动执行
        
    }
public  String intercept(ActionInvocation invocation)  throws  Exception {
        
//  TODO Auto-generated method stub
        Object user  =  ActionContext.getContext().getSession().get( " user " );
        
if (user != null ) // 判断用户是否登录
            invocation.invoke(); // 执行被拦截到的方法,不掉用,被拦截的action方法

不会被执行
        ActionContext.getContext().put(
" message " " you have not right " );
        
return   " success " ; // 定义全局
    } // 当拦击到action就会执行此方法
1 .2注册拦截器 在struts的package中注册拦截器
< package  name = " employee "  namespace = " /control/employee "   extends = " struts-default " >
        
< interceptors >   <!--  注册拦截器  -->
            
< interceptor name = " permission "  

class = " cn.itcast.interceptor.PermissionInterceptor " ></ interceptor >
            
<!--  使用拦截器栈可以使用自定义拦截器,且 不失去系统自定义拦截器功能 

-->
            
< interceptor - stack name = " permissionStack " >
                
<!--  系统默认拦截器  -->
                
< interceptor - ref name = " defaultStack " ></ interceptor - ref >
                
<!--  自定义拦截器的引入  -->
                
< interceptor - ref name = " permission " ></ interceptor - ref >
            
</ interceptor - stack >
        
</ interceptors >
        
<!-- 默认包里面全用此拦截器   1  与 @@对应 -->
        
< default - interceptor - ref name = " permissionStack " ></ default - interceptor - ref >
        
< global - results >
            
< result name = " success " >/ WEB - INF / page / message.jsp </ result >
        
</ global - results >
        
        
        
< action name = " list_* "   class = " cn.itcast.action.HelloWorldAction "  

method
= " {1} " >
            
<!--  使用拦截器 @@  -->
            
<!--   < interceptor - ref name = " permissionStack " ></ interceptor - ref >
            
< interceptor - ref name = " 增加自定义新拦截器 " ></ interceptor - ref >   -->
        
</ action >
    
</ package >

1.3  需要定义拦截器栈,否则自定义拦截器会覆盖struts自带的拦截器,使struts失去自身的拦截器功能
/ control / employee

你可能感兴趣的:(拦截器再应用学习)