博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2利用拦截器实现权限控制
阅读量:7077 次
发布时间:2019-06-28

本文共 2202 字,大约阅读时间需要 7 分钟。

权限控制,顾名思义就是对于某些页面或者操作需要满足一定的权限要求才能继续继续进行。比如说:后台管理需要管理员登录,用户密码修改等操作需要用户登录等等。在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,如需转载请自行联系原作者

你可能感兴趣的文章
python packages prebuild for windows
查看>>
这样就算会了PHP么?-10
查看>>
远程调用WMI安装软件
查看>>
从零开始学习jQuery (七) jQuery动画-让页面动起来!
查看>>
asp.net 操作word
查看>>
SQL Server 权限管理
查看>>
郎意难坚,侬情自热(文/王路)
查看>>
Form_Form Builder开发基于视图页面和自动代码生成包(案例)
查看>>
Android SDK Manager 中如果没有相应的镜像ARM XX Image
查看>>
简单聊下Unicode和UTF-8
查看>>
ASP.NET Web API的Controller是如何被创建的?
查看>>
在 Azure 上使用 Docker运行 Mono
查看>>
(转)JITComplier、NGen.exe及.NET Native
查看>>
Ant build xml中的各种变量解释
查看>>
labview视频采集IMAdx
查看>>
Android:实现一种浮动选择菜单的效果
查看>>
【转】如何查看linux版本 如何查看LINUX是多少位
查看>>
vc++基础班[28]---动态数组及动态链表的讲解
查看>>
在Windows Server 2008 R2中使用web方式修改域用户账户密码
查看>>
ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解
查看>>