1. 程式人生 > >filter配置多個url-pattern和排除個別servlet

filter配置多個url-pattern和排除個別servlet

                最近做專案遇到一個Filter需要配置多個url-pattern,上網查了下資料,經測試,現總結下
一、完全錯誤的方式
Java程式碼   收藏程式碼
  1. <filter>  
  2.     <filter-name>authority</filter-name>  
  3.     <filter-class>com.util.AuthorityFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>authority</filter-name>  
  7.     <url-pattern>/pages/cmm/*;/pages/genbill/*</url-pattern>  
  8. </filter-mapping>  

二、有一定作用,但不能實現需要的效果,只會過濾最下面配置的url-pattern。
Java程式碼   收藏程式碼
  1. <filter>  
  2.     <filter-name>authority</filter-name>  
  3.     <filter-class
    >com.util.AuthorityFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>authority</filter-name>  
  7.     <url-pattern>/pages/cmm/*</url-pattern>  
  8.        <url-pattern>/pages/genbill/*</url-pattern>  
  9. </filter-mapping>  

三、現在給出正確的配置方式
Java程式碼   收藏程式碼
  1. <filter>  
  2.     <filter-name>authority</filter-name>  
  3.     <filter-class>com.util.AuthorityFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>authority</filter-name>  
  7.        <url-pattern>/pages/genbill/*</url-pattern>  
  8. </filter-mapping>  
  9. <filter-mapping>  
  10.     <filter-name>authority</filter-name>  
  11.     <url-pattern>/pages/cmm/*</url-pattern>  
  12. </filter-mapping>

在web.xml宣告的一個filter中:

<!– session過濾filter –>  

[html] view plain copy 在CODE上檢視程式碼片 派生到我的程式碼片
  1. <filter>    
  2. <filter-name>SessionFilter</filter-name>    
  3. <filter-class>    
  4. com.iqbon.jcms.web.util.SessionFilter     
  5. </filter-class>    
  6. <init-param>    
  7. <param-name>excludedPages</param-name>    
  8. <param-value>/admin/login.do</param-value>    
  9. </init-param>    
  10. </filter>    
  11. <filter-mapping>    
  12. <filter-name>SessionFilter</filter-name>    
  13. <url-pattern>/admin/*</url-pattern>    
  14. </filter-mapping>    

可以看到url-pattern的設定裡面過濾的url規則是/admin/*,如果要把/admin/login.do排除在過濾url之外。

可以結合init-param的初始化引數和HttpServletRequest的getServletPath()方法來判斷。

 

[html] view plain copy 在CODE上檢視程式碼片 派生到我的程式碼片
  1. <init-param>    
  2. <param-name>excludedPages</param-name>    
  3. <param-value>/admin/login.do</param-value>    
  4. </init-param>    


其次在filter的java程式碼中加上判斷:

[java] view plain copy 在CODE上檢視程式碼片 派生到我的程式碼片
  1. import java.io.IOException;     
  2.   
  3. import javax.servlet.Filter;     
  4. import javax.servlet.FilterChain;     
  5. import javax.servlet.FilterConfig;     
  6. import javax.servlet.ServletException;     
  7. import javax.servlet.ServletRequest;     
  8. import javax.servlet.ServletResponse;     
  9. import javax.servlet.http.HttpServletRequest;     
  10. import javax.servlet.http.HttpServletResponse;     
  11. import javax.servlet.http.HttpSession;     
  12. import org.apache.commons.lang3.StringUtils;     
  13. import com.iqbon.jcms.util.KeyConstant;     
  14.     
  15. /**   
  16. * session過濾器   
  17. */    
  18.   
  19. public class SessionFilter implements Filter {     
  20.   
  21. /**   
  22. * 需要排除的頁面   
  23. */    
  24.   
  25. private String excludedPages;       
  26. private String[] excludedPageArray;     
  27.   
  28. /**   
  29. * @see Filter#destroy()   
  30. */    
  31.   
  32. public void destroy() {     
  33. return;     
  34. }     
  35.     
  36. /**   
  37. * 對session進行判斷當前訪問是否有登入   
  38. */    
  39.   
  40. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {     
  41. boolean isExcludedPage = false;     
  42. for (String page : excludedPageArray) {//判斷是否在過濾url之外     
  43. if(((HttpServletRequest) request).getServletPath().equals(page)){     
  44. isExcludedPage = true;     
  45. break;     
  46. }     
  47. }     
  48.   
  49. if (isExcludedPage) {//在過濾url之外     
  50. chain.doFilter(request, response);     
  51. else {//不在過濾url之外,判斷session是否存在     
  52. HttpSession session = ((HttpServletRequest) request).getSession();     
  53. if (session == null || session.getAttribute(KeyConstant.SESSION_KEY_USER) == null) {     
  54. ((HttpServletResponse) response).sendRedirect(“/login.htm”);     
  55. else {     
  56. chain.doFilter(request, response);     
  57. }     
  58. }     
  59. }     
  60.   
  61. /**   
  62. * 初始化函式,獲取需要排除在外的url   
  63. */    
  64.   
  65. public void init(FilterConfig fConfig) throws ServletException {     
  66. excludedPages = fConfig.getInitParameter(“excludedPages”);     
  67. if (StringUtils.isNotEmpty(excludedPages)) {     
  68. excludedPageArray = excludedPages.split(“,”);     
  69. }     
  70. return;     
  71. }     
  72. }  


           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智慧的隊伍中來!http://www.captainbed.net

這裡寫圖片描述