zoukankan      html  css  js  c++  java
  • 粗颗粒度权限控制(使用过滤器完成)

    分析:

    精确到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>
  • 相关阅读:
    Chrome开发者工具详解(1)
    Chrome开发者工具详解(2)
    Ubuntu ADSL拨号上网
    Bash中单引号和双引号的区别
    建立菜单
    波浪号和Hyphen扩展
    标准IO和重定向
    Bash变量扩展修改符
    mysql主键约束和唯一性约束
    Here文档
  • 原文地址:https://www.cnblogs.com/fuyiming/p/5815982.html
Copyright © 2011-2022 走看看