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 –>  

  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()方法来判断。

 

  1. <init-param>    
  2. <param-name>excludedPages</param-name>    
  3. <param-value>/admin/login.do</param-value>    
  4. </init-param>    


其次在filter的java代码中加上判断:

  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. }  


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值