Struts2利用拦截器实现权限控制

权限控制,顾名思义就是对于某些页面或者操作需要满足一定的权限要求才能继续继续进行。比如说:后台管理需要管理员登录,用户密码修改等操作需要用户登录等等。在Struts2中,简单的权限控制可以通过配置拦截器即可。下面我以修改密码进行举例:

(1)定义拦截器CheckInterceptor.java用于验证用户是否登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package  com.zxpm.interceptor; import  java.util.Map; import  com.opensymphony.xwork2.ActionInvocation; import  com.opensymphony.xwork2.interceptor.Interceptor; import  com.zxpm.entity.Users; public  class  CheckInterceptor  implements  Interceptor {
     public  String intercept(ActionInvocation arg0)  throws  Exception {
         Map<String, Object> session = arg0.getInvocationContext().getSession();
         Users u = (Users) session.get( "user" );
         if (u !=  null )
             return  arg0.invoke();
         else 
             return  "login" ;
     }
     
     public  void  destroy() {
         // TODO Auto-generated method stub
 
     }
 
     public  void  init() {
         // TODO Auto-generated method stub
 
     }}

(2)配置struts.xml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
< package  name = "user"  namespace = "/user"  extends = "struts-default" >
         < interceptors >
             <!-- 声明拦截器 -->
             < interceptor  name = "loginInterceptor"  class = "com.zxpm.interceptor.CheckInterceptor"  />
             < interceptor  name = "errorInterceptor"  class = "com.zxpm.interceptor.ErrorInterceptor"  />
             <!-- 配置拦截器栈 -->
             < interceptor-stack  name = "myErrorInterceptor" >
                 < interceptor-ref  name = "defaultStack"  />    
                 < interceptor-ref  name = "errorInterceptor"  />
             </ interceptor-stack >
         </ interceptors >
         <!-- 覆盖底层的拦截器栈 对包中的所有action都有效 -->
         < default-interceptor-ref  name = "myErrorInterceptor"  />
         < global-results >
             < result  name = "errorMsg" >/error.jsp</ result >
         </ global-results >
         < global-exception-mappings >
             < exception-mapping  result = "errorMsg"  exception = "java.lang.Exception" ></ exception-mapping >
         </ global-exception-mappings >
         < action  name = "modifyPwd"  class = "user"  method = "modifyPassword" >
             < result  type = "redirect" >/index.jsp</ result >
             < result  name = "login"  type = "redirect" >/index.jsp</ result >
             < interceptor-ref  name = "loginInterceptor"  />
             < interceptor-ref  name = "defaultStack"  />
         </ action >
     </ package >

注:i)由于这里定义了关于异常的拦截器,因此代码显得稍多,实际上就是申明拦截器,然后在action中添加interceptor-ref即可;ii)我这个小项目因为登录操作在首页,因此直接就重定向到首页去了



本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1741570,如需转载请自行联系原作者

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值