权限的表设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于RBAC的权限分配:
在做权限分配时:首先需要几张表。见下图
用户表
角色表:
用户角色表:
角色权限表:
struts2 角色权限filter(过滤器)和interceptor(拦截器)
分类:mvc框架-struts22012-12-23 11:27 358人阅读评论(0) 收藏举报
Struts2项目通过使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这种现仅仅在view层进行,如果未登录用户直接在地址栏输入登录用户才能访问的地址,那么相应的action还是会执行,仅仅是不让用户看到罢了。这样显然是不好的,所以研究了一下Struts2的权限验证。
权限最核心的是业务逻辑,具体用什么技术来实现就简单得多。
通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中。
对权限的拦截,如果系统请求量大,可以用Struts2拦截器来做,请求量小可以放在filter中。但一般单级拦截还不够,要做到更细粒度的权限控制,还需要多级拦截。
不大理解filter(过滤器)和interceptor(拦截器)的区别,遂google之。博文中有介绍:
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能。
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
为了学习决定把两种实现方式都试一下,然后再决定使用哪个。
权限验证的Filter实现:
web.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
27
SessionCheckFilter.java代码
28package filter;
29import java.io.IOException;
30import java.util.HashSet;
31import java.util.Set;
32import javax.servlet.Filter;
33import javax.servlet.FilterChain;
34import javax.servlet.FilterConfig;
35import javax.servlet.ServletException;
36import javax.servlet.ServletRequest;
37import javax.servlet.ServletResponse;
38import javax.servlet.http.HttpServletRequest;
39import javax.servlet.http.HttpServletResponse;
40import javax.servlet.http.HttpSession;
41/**
42 * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面配置参数
checkSessionKey 需检查的在 Session 中保存的关键字
43 * redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath
notCheckURLList
44 * 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath
45 */
46public class SessionCheckFilter implements Filter {
47protected FilterConfig filterConfig = null;
48private String redirectURL = null;
49private Set
50private String sessionKey = null;
51@Override
52public void destroy() {