转载自: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. drop asm disk、撤销drop asm disk

    drop asm disk.撤销drop asm disk drop asm disk:SQL> alter diskgroup XXX offline disk XXXX drop after ...

  2. AtCoder Regular Contest 074 E:RGB Sequence

    题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_c 题目翻译 给你一行\(n\)个格子,你需要给每个格子填红绿蓝三色之一,并且同时满足\(m\ ...

  3. win10 设备摄像头,麦克风,【隐私】权限

    win10 因为隐私问题, 把mic,摄像头, 定位功能关闭,  之后调用USB摄像头的时候,忘了这个, 接口API 一直返回调用失败,[不能创建视频捕捉过滤器 hr=0x80070005] => ...

  4. NancyFX 第一章 NancyFX 简介

    Nancy是.NET 平台的微框架.在受到Ruby社区的Sinatra框架启发下,NancyFx框架提供一个.NET平台下的低门槛.易上手的可用于Web开发工具包. 请注意我说的是可用于Web开发,这 ...

  5. Arduino 视频教程

    http://v.youku.com/v_show/id_XNDU1MjI4MzA4.html?from=y1.2-1-176.3.12-2.1-1-1-11

  6. C++ Queues(队列)

    C++ Queues(队列) C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.fr ...

  7. Vue实现一个MarkDown编辑器

    Vue实现一个markdown编辑器 前段时间做项目的时候,需要一个Markdown编辑器,在网上找了一些开源的实现,但是都不满足需求 说实话,这些开源项目也很难满足需求公司项目的需求,与其实现一个大 ...

  8. 洛谷P1439 排列LCS问题

    P1439 排列LCS问题 题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出 ...

  9. Vue实现选项卡效果

    <!DOCTYPE html> <html lang="en"> <head>    <meta charset="UTF-8& ...

  10. IT兄弟连 Java语法教程 Java开发环境 安装JDK

    因为我们要开发Java程序,所以必须在我们的计算机中安装Sun(Oracle)公司提供给我们的JDK.目前最新版本的JDK是JDK 10,但是我们以学习JDK 8为主,所以我们要安装的版本是JDK 8 ...