转载自:https://blog.csdn.net/hanghangde/article/details/51298221

侵删

最近做项目遇到一个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

 

  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

 

  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

 

  1. import java.io.IOException;
  2. import javax.servlet.Filter;
  3. import javax.servlet.FilterChain;
  4. import javax.servlet.FilterConfig;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletRequest;
  7. import javax.servlet.ServletResponse;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import javax.servlet.http.HttpSession;
  11. import org.apache.commons.lang3.StringUtils;
  12. import com.iqbon.jcms.util.KeyConstant;
  13. /**
  14. * session过滤器
  15. */
  16. public class SessionFilter implements Filter {
  17. /**
  18. * 需要排除的页面
  19. */
  20. private String excludedPages;
  21. private String[] excludedPageArray;
  22. /**
  23. * @see Filter#destroy()
  24. */
  25. public void destroy() {
  26. return;
  27. }
  28. /**
  29. * 对session进行判断当前访问是否有登录
  30. */
  31. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  32. boolean isExcludedPage = false;
  33. for (String page : excludedPageArray) {//判断是否在过滤url之外
  34. if(((HttpServletRequest) request).getServletPath().equals(page)){
  35. isExcludedPage = true;
  36. break;
  37. }
  38. }
  39. if (isExcludedPage) {//在过滤url之外
  40. chain.doFilter(request, response);
  41. } else {//不在过滤url之外,判断session是否存在
  42. HttpSession session = ((HttpServletRequest) request).getSession();
  43. if (session == null || session.getAttribute(KeyConstant.SESSION_KEY_USER) == null) {
  44. ((HttpServletResponse) response).sendRedirect(“/login.htm”);
  45. } else {
  46. chain.doFilter(request, response);
  47. }
  48. }
  49. }
  50. /**
  51. * 初始化函数,获取需要排除在外的url
  52. */
  53. public void init(FilterConfig fConfig) throws ServletException {
  54. excludedPages = fConfig.getInitParameter(“excludedPages”);
  55. if (StringUtils.isNotEmpty(excludedPages)) {
  56. excludedPageArray = excludedPages.split(“,”);
  57. }
  58. return;
  59. }
  60. }

最近做项目遇到一个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

 

  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

 

  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

 

  1. import java.io.IOException;
  2. import javax.servlet.Filter;
  3. import javax.servlet.FilterChain;
  4. import javax.servlet.FilterConfig;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletRequest;
  7. import javax.servlet.ServletResponse;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import javax.servlet.http.HttpSession;
  11. import org.apache.commons.lang3.StringUtils;
  12. import com.iqbon.jcms.util.KeyConstant;
  13. /**
  14. * session过滤器
  15. */
  16. public class SessionFilter implements Filter {
  17. /**
  18. * 需要排除的页面
  19. */
  20. private String excludedPages;
  21. private String[] excludedPageArray;
  22. /**
  23. * @see Filter#destroy()
  24. */
  25. public void destroy() {
  26. return;
  27. }
  28. /**
  29. * 对session进行判断当前访问是否有登录
  30. */
  31. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  32. boolean isExcludedPage = false;
  33. for (String page : excludedPageArray) {//判断是否在过滤url之外
  34. if(((HttpServletRequest) request).getServletPath().equals(page)){
  35. isExcludedPage = true;
  36. break;
  37. }
  38. }
  39. if (isExcludedPage) {//在过滤url之外
  40. chain.doFilter(request, response);
  41. } else {//不在过滤url之外,判断session是否存在
  42. HttpSession session = ((HttpServletRequest) request).getSession();
  43. if (session == null || session.getAttribute(KeyConstant.SESSION_KEY_USER) == null) {
  44. ((HttpServletResponse) response).sendRedirect(“/login.htm”);
  45. } else {
  46. chain.doFilter(request, response);
  47. }
  48. }
  49. }
  50. /**
  51. * 初始化函数,获取需要排除在外的url
  52. */
  53. public void init(FilterConfig fConfig) throws ServletException {
  54. excludedPages = fConfig.getInitParameter(“excludedPages”);
  55. if (StringUtils.isNotEmpty(excludedPages)) {
  56. excludedPageArray = excludedPages.split(“,”);
  57. }
  58. return;
  59. }
  60. }

filter配置多个url-pattern和排除个别servlet的更多相关文章

  1. Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...

  2. jsp 过滤器 Filter 配置

    .如果要映射过滤应用程序中所有资源: <filter>    <filter-name>loggerfilter</filter-name>    <filt ...

  3. JSP过滤器Filter配置过滤类型汇总

    一.配置方法1 映射过滤应用程序中所有资源<filter>    <filter-name>loggerfilter</filter-name>    <fi ...

  4. [ /* 和 / 的区别 ] Difference between / and /* in servlet mapping url pattern

    <url-pattern>/*</url-pattern> The /* on a servlet overrides all other servlets, includin ...

  5. web.xml filter配置

    filter介绍: filter主要用于对用户请求request进行预处理,和对Response进行后处理,是个典型的处理链. 详细解析起来就是:Filter对用户请求进行预处理,接着将请求HttpS ...

  6. web.xml之servlet与filter配置

    servlet配置 一个完整的servlet配置分为两块,< servlet >块和< servlet-mapping >块 < servlet > <ser ...

  7. apache重写URL时,排除静态资源

    THINKPHP项目部署的apache 上面时,如果为了隐藏入口文件配置了重写URL,会导致将静态资源的URL也解析成Controller/Method,导致触发模块不存在 所以在URL重写配置中,需 ...

  8. Filter 配置多个URL-PATTERN

    Filter 配置多个URL-PATTERN 最近做项目遇到一个Filter需要配置多个url-pattern,上网查了下资料,经测试,现总结下 一.完全错误的方式  Java代码   <fil ...

  9. spring filter 配置

    web xml <filter>    <filter-name>DelegatingFilterProxy</filter-name>    <filter ...

  10. Spring Boot 2 使用Servlet、Listener和Filter配置

    开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目. 一.使用Servlet配置 1.修改启动类 Demo ...

随机推荐

  1. uC/OS-II源码分析(二)

    在真正开始分析源代码前,先来看使用uC/OS-II的三个例子 1)使用信号量 #define  TASK_STK_SIZE                 512       /* 每个任务堆栈的大小 ...

  2. BZOJ3219:巡游

    浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...

  3. bzoj 4671 异或图 —— 容斥+斯特林反演+线性基

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 首先,考虑容斥,就是设 \( t[i] \) 表示至少有 \( i \) 个连通块的方 ...

  4. RDA项目打包

    注意APP的编译搭建: ./aps/Makefile.toolchain //ccoption path的设定 ./aps/rules.mak //统一的编译规则 MAKE -C 1.TOOLS的可执 ...

  5. JAVA基础知识 String s = new String("ABC") VS String s = "abc"

    一:   String s = new String("ABC")  VS  String  s = "abc" String  s = "abc&q ...

  6. NCBI SRA数据库

    简介 SRA数据库是美国国立卫生研究院(NIH)的高通量测序数据的主要归档,是国际核苷酸序列数据库协作(INSDC)的一部分,其中包括NCBI序列读取存档(SRA),欧洲生物信息学研究所(EBI)和D ...

  7. 《SpringBoot揭秘 快速构建微服务体系》读后感(三)

    SpringApplication:SpringBoot程序启动的一站式解决方案 深入探索SpringApplication执行流程 因为书上的版本是1.2的,比较老,这里参考http://blog. ...

  8. pythonDB api的学习

    有时候需要操作数据库,为了能使用统一的接口访问,我们采用Python DB API,地址为 https://www.python.org/dev/peps/pep-0249/ 全文参考---“疯狂的蚂 ...

  9. php array数组(第二部分)

    array_fill() 用给定的键值填充数组 参数 index 必须.规定返回数组的起始索引. 参数 number 必须.规定填充的元素的数量,其值必须大于0. 参数 value 必须.规定用于填充 ...

  10. HDU - 6114 2017百度之星初赛B Chess

    Chess  Accepts: 1805  Submissions: 5738  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768 ...