• 写一个用Filter进行用户授权的例子即过滤request


    ---恢复内容开始---

      1 LoginFilter.java 
      3 代码如下:
      4 public class LoginFilter implements Filter {  
      5     private String permitUrls[] = null; 
      6 
      7     private String gotoUrl = null; 
      8 
      9     public void destroy() { 
     10 
     11         // TODO Auto-generated method stub 
     12 
     13         permitUrls = null; 
     14 
     15         gotoUrl = null; 
     16 
     17     } 
     18 
     19     public void doFilter(ServletRequest request, ServletResponse response, 
     20 
     21             FilterChain chain) throws IOException, ServletException { 
     22 
     23         // TODO Auto-generated method stub 
     24 
     25         HttpServletRequest res=(HttpServletRequest) request; 
     26 
     27         HttpServletResponse resp=(HttpServletResponse)response; 
     28 
     29         if(!isPermitUrl(request)){ 
     30 
     31             if(filterCurrUrl(request)){ 
     32 
     33                 System.out.println("--->请登录"); 
     34 
     35                 resp.sendRedirect(res.getContextPath()+gotoUrl); 
     36 
     37                 return; 
     38 
     39             } 
     40 
     41         } 
     42 
     43         System.out.println("--->允许访问"); 
     44 
     45         chain.doFilter(request, response); 
     46 
     47     } 
     48 
     49     public boolean filterCurrUrl(ServletRequest request){ 
     50 
     51         boolean filter=false; 
     52 
     53         HttpServletRequest res=(HttpServletRequest) request; 
     54 
     55         User user =(User) res.getSession().getAttribute("user"); 
     56 
     57         if(null==user) 
     58 
     59             filter=true; 
     60 
     61         return filter;  
     62     }       
     63 
     64     public boolean isPermitUrl(ServletRequest request) { 
     65 
     66         boolean isPermit = false; 
     67 
     68         String currentUrl = currentUrl(request); 
     69 
     70         if (permitUrls != null && permitUrls.length > 0) { 
     71 
     72             for (int i = 0; i < permitUrls.length; i++) { 
     73 
     74                 if (permitUrls[i].equals(currentUrl)) { 
     75 
     76                     isPermit = true; 
     77 
     78                     break; 
     79 
     80                 } 
     81 
     82             } 
     83 
     84         } 
     85 
     86         return isPermit; 
     87 
     88     }        
     89 
     90     //请求地址 
     91 
     92     public String currentUrl(ServletRequest request) {   
     93 
     94         HttpServletRequest res = (HttpServletRequest) request; 
     95 
     96         String task = request.getParameter("task"); 
     97 
     98         String path = res.getContextPath(); 
     99 
    100         String uri = res.getRequestURI(); 
    101 
    102         if (task != null) {// uri格式 xx/ser 
    103 
    104             uri = uri.substring(path.length(), uri.length()) + "?" + "task="
    105 
    106                     + task; 
    107 
    108         } else { 
    109 
    110             uri = uri.substring(path.length(), uri.length()); 
    111 
    112         } 
    113 
    114         System.out.println("当前请求地址:" + uri); 
    115 
    116         return uri; 
    117 
    118     } 
    119 
    120     public void init(FilterConfig filterConfig) throws ServletException { 
    121 
    122         // TODO Auto-generated method stub 
    123 
    124         String permitUrls = filterConfig.getInitParameter("permitUrls"); 
    125 
    126         String gotoUrl = filterConfig.getInitParameter("gotoUrl"); 
    127 
    128   
    129 
    130         this.gotoUrl = gotoUrl; 
    131 
    132   
    133 
    134         if (permitUrls != null && permitUrls.length() > 0) { 
    135 
    136             this.permitUrls = permitUrls.split(","); 
    137 
    138         } 
    139 
    140     } 
    141 
    142 }
    143 
    144 Web.xml
    145 
    146  代码如下:
    147 <filter>  
    148     <filter-name>loginFilter</filter-name> 
    149 
    150     <filter-class>filter.LoginFilter</filter-class> 
    151 
    152   
    153 
    154     <init-param> 
    155 
    156         <param-name>ignore</param-name> 
    157 
    158         <param-value>false</param-value> 
    159 
    160     </init-param> 
    161 
    162     <init-param> 
    163 
    164         <param-name>permitUrls</param-name> 
    165 
    166         <param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value> 
    167 
    168     </init-param> 
    169 
    170     <init-param> 
    171 
    172         <param-name>gotoUrl</param-name> 
    173 
    174         <param-value>/login.jsp</param-value> 
    175 
    176     </init-param> 
    177 
    178 </filter> 
    179 
    180 <filter-mapping> 
    181 
    182     <filter-name>loginFilter</filter-name> 
    183 
    184     <url-pattern>/*</url-pattern> 
    185 
    186 </filter-mapping>

    ---恢复内容结束---

  • 相关阅读:
    P4141 消失之物(退背包模板)
    P5829 【模板】失配树
    P4827 [国家集训队] Crash 的文明世界
    P4074 [WC2013]糖果公园
    P3242 [HNOI2015]接水果
    P2371 [国家集训队]墨墨的等式
    P4819 [中山市选]杀人游戏
    P5331 [SNOI2019]通信
    BZOJ1082 [SCOI2005]栅栏
    poj1475 Pushing Boxes[双重BFS(毒瘤搜索题)]
  • 原文地址:https://www.cnblogs.com/zy12/p/8693886.html
Copyright © 2020-2023  润新知