粗颗粒度权限控制(使用过滤器完成)

Posted 起今知行 | 思考者 | Freedom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了粗颗粒度权限控制(使用过滤器完成)相关的知识,希望对你有一定的参考价值。

分析:

精确到Session的权限控制(判断Session是否存在)

使用过滤器完成粗颗粒的权限控制,如果Session不存在就跳转到首页,如果存在可以通过URL链接访问到对应的操作。

第一步:定义一个过滤器:

 1 public class SystemFilter implements Filter {
 2 
 3     /**web容器启动的时候,执行的方法*/
 4     //存放没有Session之前,需要放行的连接
 5     List<String> list = new ArrayList<String>();
 6     public void init(FilterConfig config) throws ServletException {
 7         list.add("/index.jsp");
 8         list.add("/image.jsp");
 9         list.add("/system/elecMenuAction_menuHome.do");
10     }
11     
12     /**每次访问URL连接的时候,先执行过滤器的doFilter的方法*/
13     public void doFilter(ServletRequest req, ServletResponse res,
14             FilterChain chain) throws IOException, ServletException {
15         HttpServletRequest request = (HttpServletRequest) req;
16         HttpServletResponse response = (HttpServletResponse) res;
17         //获取访问的连接地址
18         String path = request.getServletPath();
19         //在访问首页index.jsp页面之前,先从Cookie中获取name,password的值,并显示在页面上(完成记住我)
20         this.forwordIndexPage(path,request);
21         //如果访问的路径path包含在放行的List的存放的连接的时候,此时需要放行
22         if(list.contains(path)){
23             chain.doFilter(request, response);
24             return;
25         }
26         //获取用户登录的Session
27         ElecUser elecUser = (ElecUser)request.getSession().getAttribute("globle_user");
28         //放行
29         if(elecUser!=null){
30             chain.doFilter(request, response);
31             return;
32         }
33         //重定向到登录页面
34         response.sendRedirect(request.getContextPath()+"/index.jsp");
35     }
36     
37     /**销毁*/
38     public void destroy() {
39 
40     }
41 }

第二步:在web容器中添加对应的过滤器:

 1 <!-- 自定义过滤器,要求添加到struts2过滤器的前面 -->
 2     <filter>
 3         <filter-name>SystemFilter</filter-name>
 4         <filter-class>cn.itcast.elec.util.SystemFilter</filter-class>
 5     </filter>
 6     <filter-mapping>
 7         <filter-name>SystemFilter</filter-name>
 8         <url-pattern>*.do</url-pattern>
 9         <url-pattern>*.jsp</url-pattern>
10     </filter-mapping>

总结:

  • 在过滤器中定义放行的连接,因为不是每个操作都会存在Session
  • 在过滤器中获取登录后存放的Session,如果Session不为空,则放行,即可以操作定义的业务功能,如果Session为空,则跳转到登录页面。
  • 控制访问的系统必须要存在Session

注意:

  Session不应该在服务器一直不清空,如果Session过多,会导致Session压力大,系统变慢,于是要求10分钟如果不操作系统,将Session自动清空。在web.xml中配置

1 <session-config>
2     <session-timeout>10</session-timeout>
3 </session-config>

 

以上是关于粗颗粒度权限控制(使用过滤器完成)的主要内容,如果未能解决你的问题,请参考以下文章

shiro--颗粒度

(二十四)权限控制(粗粒度)-通过filter

简单的权限设计

基于session做的权限控制

odoo14开发侧权限配置

敏捷实践思考1--需求颗粒度该如何与业务沟通