在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. 雄关漫步真如铁 而今迈步从头越
  2. 符号说明表怎么做_教会你的孩子正确使用标点符号
  3. 【吐血推荐】领域驱动设计学习输出
  4. 从公司发展看技术人才需求
  5. 【数据竞赛】“达观杯”文本智能处理挑战赛6——模型优化
  6. linux如何更改ssh配置文件,Linux系统下ssh的相关配置详细解析
  7. 2021最新基于会话推荐系统长文综述
  8. Remix恢复已部署的合约
  9. prime算法-最小生成树
  10. AceAdmin In MVC之控件
  11. 消息队列 RocketMQ原理和使用整理
  12. 数据结构与算法分析—C语言描述 pdf
  13. java教学视频毕向东_集合3--毕向东java基础教程视频学习笔记
  14. 【强大知名的CAD绘图工具】AutoCAD 2019 for Mac
  15. 纯代码实现WordPress文章部分内容关注微信公众号后可见
  16. BC渗透的常见切入点(总结)
  17. GWAS中的Gene-Gene Interactions如何分析?看这里
  18. gpu-z中的几个上限
  19. python基础——数据类型
  20. 浩顺回头客餐饮系统服务器安装,浩顺回头客餐饮管理软件

热门文章

  1. set python用法_Python set()用法及代码示例
  2. python终端会话_如何为Python终端提供持久性历史记录
  3. 服务器报告它来自digest_2020年全球服务器市场规模及竞争格局分析
  4. 初识openwrt(上)
  5. java的随机数生成原理
  6. centos7 安装mysql8_CentOS 下 MySQL 8.0 安装部署,超详细!
  7. 【java】JVM中Perm区持续上涨问题
  8. 【Elasticsearch】Elasticsearch 分布式一致性原理分析:元数据
  9. 95-10-132-启动-TransactionCoordinator-源码
  10. 【Elasticsearch】解决Elasticsearch HTTP方式查询报SocketTimeoutException的问题 Connection reset by peer