在web.xml中配置的Filter如下:

<filter><filter-name>HazardousParametersFilter</filter-name><filter-class>com.galaxy.apps.common.HazardousParametersFilter</filter-class><init-param><param-name>ignoreRegex</param-name><param-value>/upload/mobileUploadPic</param-value></init-param>
</filter>
<filter-mapping><filter-name>HazardousParametersFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

可以看到url-pattern的设置里面过滤的url规则是/*,如果要把/upload/mobileUploadPic排除在过滤url之外。

可以结合init-param的初始化参数和HttpServletRequest的getServletPath()方法来判断。

 <init-param><param-name>ignoreRegex</param-name><param-value>/upload/mobileUploadPic</param-value></init-param>

下面是是过滤器HazardousParametersFilter中的具体操作

package com.galaxy.apps.common;import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;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 org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;import com.galaxy.apps.utils.HazardousParameterHelper;
import com.jovtec.galaxy.util.RequestHelper;
import com.jovtec.galaxy.util.StringHelper;public class HazardousParametersFilter implements Filter {private static final Log logger = LogFactory.getLog("SecurityLogger");private String ignoreRegex;private String[] ignoreRegexArray;public String getIgnoreRegex() {return ignoreRegex;}public void setIgnoreRegex(String ignoreRegex) {this.ignoreRegex = ignoreRegex;}public String[] getIgnoreRegexArray() {return ignoreRegexArray;}public void setIgnoreRegexArray(String[] ignoreRegexArray) {this.ignoreRegexArray = ignoreRegexArray;}public void init(FilterConfig filterConfig) throws ServletException {ignoreRegex = filterConfig.getInitParameter("ignoreRegex");if (StringUtils.isNotEmpty(ignoreRegex)) {ignoreRegexArray = ignoreRegex.split(",");}return;}public void destroy() {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;String requestURI = request.getRequestURI();boolean isExcludedPage = false;for (String page : ignoreRegexArray) {// 判断是否在过滤url之外if (request.getServletPath().equals(page)) {isExcludedPage = true;break;}}// 如果得不到URI,或者URI是后台地址,则直接返回if (StringHelper.isEmpty(requestURI) || requestURI.startsWith("/portal/") || isExcludedPage) {filterChain.doFilter(servletRequest, servletResponse);return;}// TODO html、shtml如何优化性能?也需要过滤,否则shtml的include无法进入本filter// TODO 忽略ignoreRegex指定的URL,/portal/也应该到这个里面去忽略boolean hasHazardous = false;Map pm = servletRequest.getParameterMap();if (pm != null && !pm.isEmpty()) { // 性能优化Set keySet = pm.keySet();for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {String key = (String) iterator.next();String[] values = (String[]) pm.get(key);if (HazardousParameterHelper.hasHazardousChar(values)) {hasHazardous = true;break;}}}// 如果有风险字符,则将其转义,记录日志,继续执行程序if (hasHazardous) {logger.info("该URL接收了风险字符参数:" + request.getRequestURL() + ",客户IP:" + request.getRemoteAddr() + ",参数列表:"+ RequestHelper.getParameterMapToString(pm));HazardousRequestWrapper hazReqWrapper = new HazardousRequestWrapper(request);filterChain.doFilter(hazReqWrapper, servletResponse);} else {filterChain.doFilter(servletRequest, servletResponse);}}
}

完~

转载于:https://www.cnblogs.com/fron/p/filter-20170224.html

Filter过滤器除去部分URL链接相关推荐

  1. php 验证url,php过滤器filter验证邮箱、url和ip地址等

    1.验证邮箱 复制代码 代码示例: $email = 'sjlinyu@qq.com'; $result = filter_var($email, FILTER_VALIDATE_EMAIL); va ...

  2. 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源

    从下载安装开始的所有笔记. 其实 Flask 的示例程序算是 MVC 模式的. Model 是 ORM, V 是 Template, C 是 url route 和 request handler. ...

  3. Flask_day_2渲染Jinja2模板和传参(if判断、for循环、过滤器、继承和block、URL链接)

    ***Flask渲染Jinja2模板和传参: 1.如何渲染模板 *模板放在'templates'文件夹下 *在'flask'中导入'render_template' *在视频函数中,用'render_ ...

  4. 详谈 Filter 过滤器

    详谈 Filter 过滤器 文章首发在CSDN博客,转载请务必注明以下所有链接,否则考虑法律追究责任. CSDN地址:http://blog.csdn.net/tzs_1041218129/artic ...

  5. jsp filter 过滤器

    过滤器的作用是什么? 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet.过滤器也可以附加到 JavaSe ...

  6. Shiro笔记五:Shiro内置Filter过滤器

    Shiro笔记五:Shiro内置Filter过滤器 shiro内置的过滤器 核心过滤器类:DefaultFilter,配置哪个路径对应哪个拦截器进行处理. authc:org.apache.shiro ...

  7. [JAVA EE] Filter过滤器

    Filter过滤器 ◼ 过滤器(Filter)可以动态地拦截请求和响应. ◼ 应用场景:过滤敏感词汇.防止SQL注入.设置字符编码.进行URL级 别的权限访问控制.压缩响应信息等. 启动文件DemoA ...

  8. javaweb学习总结(四十二)——Filter(过滤器)学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  9. spring boot Filter过滤器的简单使用

    springboot使用Filter过滤器有两种方式: 一种是实现Filter接口然后通过@Component注解向项目加入过滤器 另一种是通过配置类来配置过滤器 @Component public ...

最新文章

  1. 三菱fx2n64mr说明书_三菱FX2N可编程控制器使用手册
  2. 第十六届全国大学生智能车竞赛创意组别-航天智慧物流
  3. 粽子机器人视频教程_包粽子服务机器人的制作方法
  4. 14岁上大学,29岁拿下教职,如今这位华裔学者拿下Jeffrey Elman大奖
  5. 【Webkit Blog翻译】深入研究WebRTC | 内有福利
  6. systemctl 命令完全指南
  7. 2019 Multi-University Training Contest 1 - 1011 - Function - 数论
  8. vscode 连接docker_在VS Code中使用带Docker容器的Java开发环境 – Bruno Borge
  9. 索尼收购挪威公司Nevion 进一步增强其业务组合
  10. E4/EAS/Eventing System 事件系统
  11. jQuery源码高清视频教程
  12. MQTT协议报文格式解析
  13. synchronized 关键字与GuardedBy注解的关系
  14. 前端面试官常问javaScript编程题,隔壁王大爷看了都会了
  15. 23年教资面试开始啦个人报名流程
  16. css鼠标划过时的一些小特效
  17. 从Hadoop到Spark和Flink,大数据处理框架十年激荡发展史
  18. TOC视角:巴顿将军的管理角色-----项目关键链(转)
  19. PHP 规则引擎 Hoa\Ruler
  20. fps游戏通用内存自瞄算法的原理与C++实现

热门文章

  1. Spring容器创建流程(6)国际化支持
  2. Unity3D中JavaScript与C#对比
  3. jsp用户登录验证_Java之使用过滤器进行登录验证
  4. pycharm+python3.7+pyqt配置_Python3+Pycharm+PyQt5环境搭建步骤图文详解
  5. Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析
  6. html的div块float后宽度无效,行内元素(例如)设置float之后才能用width调整宽度...
  7. php中crypt怎么还原,PHP笔记 —— crypt方法
  8. oracle job 每月前十天运行_Tensorflow源码解析7 -- TensorFlow分布式运行时
  9. 95-20-010-协议-Kafka的Request和Response
  10. 05-不是内部或外部命令,也不是可运行的程序或批处理文件