filter配置多个url-pattern和排除个别servlet
转载自:https://blog.csdn.net/hanghangde/article/details/51298221
侵删
最近做项目遇到一个Filter需要配置多个url-pattern,上网查了下资料,经测试,现总结下
一、完全错误的方式
- <filter>
- <filter-name>authority</filter-name>
- <filter-class>com.util.AuthorityFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/cmm/*;/pages/genbill/*</url-pattern>
- </filter-mapping>
二、有一定作用,但不能实现需要的效果,只会过滤最下面配置的url-pattern。
- <filter>
- <filter-name>authority</filter-name>
- <filter-class>com.util.AuthorityFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/cmm/*</url-pattern>
- <url-pattern>/pages/genbill/*</url-pattern>
- </filter-mapping>
三、现在给出正确的配置方式
- <filter>
- <filter-name>authority</filter-name>
- <filter-class>com.util.AuthorityFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/genbill/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/cmm/*</url-pattern>
- </filter-mapping>
在web.xml声明的一个filter中:
<!– session过滤filter –>
- <filter>
- <filter-name>SessionFilter</filter-name>
- <filter-class>
- com.iqbon.jcms.web.util.SessionFilter
- </filter-class>
- <init-param>
- <param-name>excludedPages</param-name>
- <param-value>/admin/login.do</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>SessionFilter</filter-name>
- <url-pattern>/admin/*</url-pattern>
- </filter-mapping>
可以看到url-pattern的设置里面过滤的url规则是/admin/*,如果要把/admin/login.do排除在过滤url之外。
可以结合init-param的初始化参数和HttpServletRequest的getServletPath()方法来判断。
- <init-param>
- <param-name>excludedPages</param-name>
- <param-value>/admin/login.do</param-value>
- </init-param>
其次在filter的java代码中加上判断:
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.commons.lang3.StringUtils;
- import com.iqbon.jcms.util.KeyConstant;
- /**
- * session过滤器
- */
- public class SessionFilter implements Filter {
- /**
- * 需要排除的页面
- */
- private String excludedPages;
- private String[] excludedPageArray;
- /**
- * @see Filter#destroy()
- */
- public void destroy() {
- return;
- }
- /**
- * 对session进行判断当前访问是否有登录
- */
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
- boolean isExcludedPage = false;
- for (String page : excludedPageArray) {//判断是否在过滤url之外
- if(((HttpServletRequest) request).getServletPath().equals(page)){
- isExcludedPage = true;
- break;
- }
- }
- if (isExcludedPage) {//在过滤url之外
- chain.doFilter(request, response);
- } else {//不在过滤url之外,判断session是否存在
- HttpSession session = ((HttpServletRequest) request).getSession();
- if (session == null || session.getAttribute(KeyConstant.SESSION_KEY_USER) == null) {
- ((HttpServletResponse) response).sendRedirect(“/login.htm”);
- } else {
- chain.doFilter(request, response);
- }
- }
- }
- /**
- * 初始化函数,获取需要排除在外的url
- */
- public void init(FilterConfig fConfig) throws ServletException {
- excludedPages = fConfig.getInitParameter(“excludedPages”);
- if (StringUtils.isNotEmpty(excludedPages)) {
- excludedPageArray = excludedPages.split(“,”);
- }
- return;
- }
- }
最近做项目遇到一个Filter需要配置多个url-pattern,上网查了下资料,经测试,现总结下
一、完全错误的方式
- <filter>
- <filter-name>authority</filter-name>
- <filter-class>com.util.AuthorityFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/cmm/*;/pages/genbill/*</url-pattern>
- </filter-mapping>
二、有一定作用,但不能实现需要的效果,只会过滤最下面配置的url-pattern。
- <filter>
- <filter-name>authority</filter-name>
- <filter-class>com.util.AuthorityFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/cmm/*</url-pattern>
- <url-pattern>/pages/genbill/*</url-pattern>
- </filter-mapping>
三、现在给出正确的配置方式
- <filter>
- <filter-name>authority</filter-name>
- <filter-class>com.util.AuthorityFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/genbill/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>authority</filter-name>
- <url-pattern>/pages/cmm/*</url-pattern>
- </filter-mapping>
在web.xml声明的一个filter中:
<!– session过滤filter –>
- <filter>
- <filter-name>SessionFilter</filter-name>
- <filter-class>
- com.iqbon.jcms.web.util.SessionFilter
- </filter-class>
- <init-param>
- <param-name>excludedPages</param-name>
- <param-value>/admin/login.do</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>SessionFilter</filter-name>
- <url-pattern>/admin/*</url-pattern>
- </filter-mapping>
可以看到url-pattern的设置里面过滤的url规则是/admin/*,如果要把/admin/login.do排除在过滤url之外。
可以结合init-param的初始化参数和HttpServletRequest的getServletPath()方法来判断。
- <init-param>
- <param-name>excludedPages</param-name>
- <param-value>/admin/login.do</param-value>
- </init-param>
其次在filter的java代码中加上判断:
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.commons.lang3.StringUtils;
- import com.iqbon.jcms.util.KeyConstant;
- /**
- * session过滤器
- */
- public class SessionFilter implements Filter {
- /**
- * 需要排除的页面
- */
- private String excludedPages;
- private String[] excludedPageArray;
- /**
- * @see Filter#destroy()
- */
- public void destroy() {
- return;
- }
- /**
- * 对session进行判断当前访问是否有登录
- */
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
- boolean isExcludedPage = false;
- for (String page : excludedPageArray) {//判断是否在过滤url之外
- if(((HttpServletRequest) request).getServletPath().equals(page)){
- isExcludedPage = true;
- break;
- }
- }
- if (isExcludedPage) {//在过滤url之外
- chain.doFilter(request, response);
- } else {//不在过滤url之外,判断session是否存在
- HttpSession session = ((HttpServletRequest) request).getSession();
- if (session == null || session.getAttribute(KeyConstant.SESSION_KEY_USER) == null) {
- ((HttpServletResponse) response).sendRedirect(“/login.htm”);
- } else {
- chain.doFilter(request, response);
- }
- }
- }
- /**
- * 初始化函数,获取需要排除在外的url
- */
- public void init(FilterConfig fConfig) throws ServletException {
- excludedPages = fConfig.getInitParameter(“excludedPages”);
- if (StringUtils.isNotEmpty(excludedPages)) {
- excludedPageArray = excludedPages.split(“,”);
- }
- return;
- }
- }
filter配置多个url-pattern和排除个别servlet的更多相关文章
- Winform下CefSharp的引用、配置、实例与报错排除(源码)
Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...
- jsp 过滤器 Filter 配置
.如果要映射过滤应用程序中所有资源: <filter> <filter-name>loggerfilter</filter-name> <filt ...
- JSP过滤器Filter配置过滤类型汇总
一.配置方法1 映射过滤应用程序中所有资源<filter> <filter-name>loggerfilter</filter-name> <fi ...
- [ /* 和 / 的区别 ] Difference between / and /* in servlet mapping url pattern
<url-pattern>/*</url-pattern> The /* on a servlet overrides all other servlets, includin ...
- web.xml filter配置
filter介绍: filter主要用于对用户请求request进行预处理,和对Response进行后处理,是个典型的处理链. 详细解析起来就是:Filter对用户请求进行预处理,接着将请求HttpS ...
- web.xml之servlet与filter配置
servlet配置 一个完整的servlet配置分为两块,< servlet >块和< servlet-mapping >块 < servlet > <ser ...
- apache重写URL时,排除静态资源
THINKPHP项目部署的apache 上面时,如果为了隐藏入口文件配置了重写URL,会导致将静态资源的URL也解析成Controller/Method,导致触发模块不存在 所以在URL重写配置中,需 ...
- Filter 配置多个URL-PATTERN
Filter 配置多个URL-PATTERN 最近做项目遇到一个Filter需要配置多个url-pattern,上网查了下资料,经测试,现总结下 一.完全错误的方式 Java代码 <fil ...
- spring filter 配置
web xml <filter> <filter-name>DelegatingFilterProxy</filter-name> <filter ...
- Spring Boot 2 使用Servlet、Listener和Filter配置
开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目. 一.使用Servlet配置 1.修改启动类 Demo ...
随机推荐
- 如何使用代码美化器Uncrustify (How to use code beautifier Uncrustify)
1.下载NodePad++, 2.选择菜单Plugins/Plugin Manager/Show Plugin Manager 3.勾选UniversalIndentGUI,点击Install 4.下 ...
- POJ2828(插队问题)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 17077 Accepted: 8466 Desc ...
- 关于java中equals与==的区别的小实验
java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...
- C++读取XML,tinyXml的使用
前言: 最近在开发的过程中,有个需求是对xml进行格式转化,从一种格式转化到另外一种格式.因此,就需要读取xml进行处理.原本打算写成工具在linux下运行,不过后来考虑到和系统结合,最后也就使用了前 ...
- 钉钉/支付宝小程序和微信小程序的区别及转换方案
最近接到一个工作任务,是把钉钉小程序转微信小程序... 对,居然还有这种操作,之前只听过微信小程序转支付宝小程序的,钉钉转微信是什么鬼
- 51nod1154(dp)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1154 题意:中文题目诶- 思路:字符串长度不大于5e3,O(n ...
- python 模拟事件触发机制
EventManager.py # -*- encoding: UTF-8 -*- # 系统模块 from queue import Queue, Empty from threading impor ...
- vector详解
/*vector向量容器*/ //用数组方式访问vector元素 #include<iostream> #include<vector> #include<cstdio& ...
- CF 1215解题报告
T1 偶数输出n/2 奇数输出(n-1)/2即可 T2 判断是不是回文 不是直接输出子串 是回文继续判断 如果他前(len+1)/2内没有相同 输出-1 其他的 交换不同字符,输出子串 T3 贪心+二 ...
- php对数组操作的函数
array_reverse 以相反的顺序返回数组 array_unique 数组元素去重(只对一维数组有效) array_intersect两个或多个数组取交集 implode和explode也 ...
