在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);
}
}
}

完~

Filter过滤器除去部分URL链接的更多相关文章

  1. [Java] JSP笔记 - Filter 过滤器

    一.什么是Web过滤器 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充. Servlet 过滤器是可插入的 Web 组件, ...

  2. Filter过滤器介绍

    简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...

  3. filter 过滤器(监听)

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

  4. Java 中的 Filter 过滤器详解

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

  5. Filter(过滤器)学习

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

  6. spring filter过滤器

    1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ...

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

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

  8. Java Web进阶——Filter过滤器

    一.过滤器的介绍: 在Servlet规范2.3中定义了过滤器,它是一个服务器端的组件,可以截取用户端的请求与响应信息,并且对这些信息进行过滤. Servlet过滤器本身并不生成请求和响应对象,只是提供 ...

  9. Java中的Filter过滤器

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

随机推荐

  1. redis系列:分布式锁

    redis系列:分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...

  2. .net通过iTextSharp.pdf操作pdf文件实现查找关键字签字盖章

    之前这个事情都CA公司去做的,现在给客户做demo,要模拟一下签字盖章了,我们的业务PDF文件是动态生成的所以没法通过坐标定位,只能通过关键字查找定位了. 之前在网上看了许多通多通过查询关键字,然后图 ...

  3. java数组基础知识

    数组的定义:int[] array=new array[n];int array[]={, , , ,};定义了数组,JVM就会给其一个空间,数组是应用类型的数据类型,其存储方式是随机存储. 数组的遍 ...

  4. Solon rpc 1.2.18 发布,突出Rpc特性

    Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,3500多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:Rpc. ...

  5. ABP vNext EventBus For RabbitMQ 分布式事件总线使用注意事项_补充官网文档

    [https://docs.abp.io/zh-Hans/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration](ABP vNext官方文档链接) ...

  6. 2021新年 Vue3.0 + Element UI 尝鲜小记

    2021年,又是新的一年,Vue 已经发布 3.0 版本,最好用的 UI 组件库 Element UI 也发布了适配 Vue3.0 的新版本,是时候开始学习一下这两个新技术. 本文主要记录了使用 Vu ...

  7. Python基础语法4-运算符

    Python提供了一系列丰富的运算符,包括:  Ø算术运算符  Ø赋值运算符  Ø关系运算符  Ø逻辑运算符 Ø位运算符  Ø三元运算符 Ø身份运算符 Ø成员运算符

  8. mybatis入门教程之搭建一个简单的mybatis项目并启动它

    一.准备条件: 1.依赖jar包:mybatis核心包(必须).lombok插件包(非必须)以及MySQL数据库连接驱动包(必须) <dependency> <groupId> ...

  9. Session、Cookie与Token

    http协议是无状态协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到 ...

  10. /usr/bin/ld: cannot find -lc

    yum install glibc-static [root@test chkrootkit-0.50]# make sensecc -static -o strings-static strings ...