转载自: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. unbuntu下安装qq

    由于Wine QQ一直没更新版本导致目前版本报版本过低无法使用,暂时先上UK官网的国际版Wine QQ,虽然功能没那么新,但稳定能用: 下载: 下载地址:http://www.ubuntukylin. ...

  2. Father Christmas flymouse

    Father Christmas flymouse Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3479   Accep ...

  3. BZOJ1018:[SHOI2008]堵塞的交通

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  4. undefined reference to `pthread_create' collect2: ld returned 1 exit status

    问题原因:    pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atf ...

  5. [hdu4738]求桥模板

    oj问题,待修改,存档. #include<stdio.h> #include<iostream> #include<cstdio> #include<sta ...

  6. 下载win7/win8/win10镜像

    关于给电脑换系统,很多人会花钱去电脑店里换,或者是下载Ghost系统.但这些系统都不是微软原版的,制作者已经集成了很多常用软件或垃圾软件进去.我在这给大家介绍的是如何下载正版的Windows系统.这个 ...

  7. 转载ASP.NET MVC中Session的处理机制

    本文章转载自 http://www.cnblogs.com/darrenji/p/3951065.html ASP.NET MVC中的Session以及处理方式   最近在ASP.NET MVC项目中 ...

  8. swfupload原理总结

    1.引入js(js内动态添加上传的文件并提交表单) 2.后台处理(将图片保存) 3.调用另一个js修改前台图片的地址(改为新的图片地址)

  9. Git提交与恢复

    Git提交与恢复 提交修改 git add --all # 提交所有修改文件 git add file file # 提交部分修改文件 $ git status On branch master Yo ...

  10. Search index

    问题:查找字符串b在a中的起始位置,如果b不为a的子串,则返回-1 示例: 输入:a = "well", b = "el"    输出:1 输入:a=" ...