个人笔记--struts2对Action的权限拦截

  1. 编写一个类实现com.opensymphony.xwork2.interceptor.Interceptor接口
  2. 配置struts.xml 文件
  3. 注意

编写一个类实现com.opensymphony.xwork2.interceptor.Interceptor接口

PermissionInterceptor.java

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package cn.sky.bookshop.interceptor;

import org.apache.struts2.ServletActionContext;
import cn.sky.bookshop.utils.DateUtil;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class PermissionInterceptor implements Interceptor {

private static final long serialVersionUID = -1908127830415801520L;

private String includeUrl;

public void destroy() {
}

public void init() {
}

public String intercept(ActionInvocation invocation) throws Exception {
//会话session中取出uname
Object obj = ServletActionContext.getRequest().getSession().getAttribute("uname");
//获取访问路径
String path = ServletActionContext.getRequest().getServletPath();
//如果存在uname或者访问路径包含在includeUrl中
if (obj != null || includeUrl.contains(path)) {
return invocation.invoke(); //继续调用下一个拦截器,如果没有则执行Action
}
ServletActionContext.getRequest().setAttribute("errorInfo","No permission to operate the page");//保存错误信息
return "disallow";//返回视图
}

public String getIncludeUrl() {
return includeUrl;
}

public void setIncludeUrl(String includeUrl) {
this.includeUrl = includeUrl;
}
}

配置struts.xml 文件

1 定义一个自己的默认包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<package name="my-struts-default" namespace="/" extends="struts-default">

<interceptors>
<!-- 这里是定义一个拦截器 -->
<interceptor name="permission" class="cn.sky.bookshop.interceptor.PermissionInterceptor">
<!-- 拦截器的初始化注入参数 -->
<param name="includeUrl">/user/user_login.action,/getcode</param>
</interceptor>
<!-- 这里定义一个拦截器栈 -->
<interceptor-stack name="myDefalutStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="permission"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--设置默认的拦截器栈(访问Action前默认调用)-->
<default-interceptor-ref name="myDefalutStack"></default-interceptor-ref>
<!-- 全局result -->
<global-results>
<result name="disallow" type="redirect">/login.jsp</result>
</global-results>
<action name="getcode" class="cn.sky.bookshop.action.VerifyCodeAction">
</action>

</package>

2 以后的包都继承上面my-struts-default

注意

这里只能实现对访问Action时实现拦截,对jsp的访问不可能实现拦截。(可以将自定义拦截器栈中的默认拦截器
defaultStack注释掉,访问jsp发现根本没执行过此拦截器。可想而知,在拦截器工作之前对jsp的页面请求已经做出响应了。)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [email protected]

文章标题:个人笔记--struts2对Action的权限拦截

本文作者:xuxihai123

发布时间:2016-10-24, 10:10:45

最后更新:2021-05-06, 04:41:13

原始链接:https://www.xuxihai.com/2016/10/24/structs2-action-perm/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏