Filter过滤器除去部分URL链接
在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链接的更多相关文章
- [Java] JSP笔记 - Filter 过滤器
一.什么是Web过滤器 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充. Servlet 过滤器是可插入的 Web 组件, ...
- Filter过滤器介绍
简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...
- filter 过滤器(监听)
Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...
- Java 中的 Filter 过滤器详解
Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...
- Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- spring filter过滤器
1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ...
- javaweb学习总结(四十二)——Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- Java Web进阶——Filter过滤器
一.过滤器的介绍: 在Servlet规范2.3中定义了过滤器,它是一个服务器端的组件,可以截取用户端的请求与响应信息,并且对这些信息进行过滤. Servlet过滤器本身并不生成请求和响应对象,只是提供 ...
- Java中的Filter过滤器
Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...
随机推荐
- 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL serve 错误1130:主机192.168.1.3& ...
- 当会打王者荣耀的AI学会踢足球,一不小心拿下世界冠军!
难得的元旦小假期,没有什么比得上在慵懒的冬日艳阳下放松自己,拿起手机,叫上了许久未一起作战的小伙伴,到王者荣耀中激战了一番,仿佛又回到了当年那个年轻的自己. 厉害不,毕竟当年DD也是王者五十星的水平, ...
- 20210105 - python自动化办公简介
新的一年开始了, 计划每周至少更新三篇博客. 人生苦短,如果不做改变,人生很快会过去!2021年寻求改变,加油! python自动化办公: 1.相关工具与环境的安装概要: 需要用到python(一种开 ...
- .net core 中使用Log4net输出日志到Mysql数据库中
.net core 中使用Log4net输出日志到数据库中去 1.使用Nuget安装log4net 和 mysql.data 2.设置log4net 的配置文件 log4net.config 可以设置 ...
- Go从入门到放弃(笔记存档)
前言 考虑到印象笔记以后不续费了,这里转存到博客园一份 因内容是自己写的笔记, 未作任何润色, 所以看着很精简, 请见谅 查看官方文档 在新的go安装包中,为了减小体积默认去除了go doc 安装go ...
- Session、Cookie与Token
http协议是无状态协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到 ...
- CTFHub - Web(二)
目录遍历: 法一: 依次查看目录即可: 法二: 利用脚本: #!/usr/bin/python3 # -*- coding: utf-8 -*- # --author:valecalida-- ...
- 单线程的as-if-serial语义
单线程的as-if-serial语义 关于指令重排序有个问题不明白的一个问题 int a = 2; int c = 1 + a; float b = 3f / 2f; 举个栗子,从CPU的设计者以及编 ...
- QT串口助手(二):参数配置
作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 主要实现功能 串口参数的配置:波特率.数据位.停止位.校验位 本机串口设备的查询与添加显示 串口设备的手动更新与打 ...
- 1.8V升3V芯片,1.8V升3.3V升压芯片方案
两节干电池由于耗电量电压会降低,无法长期稳定的输出3V或者3.3V供电,直接两节干电池会供电电压不稳,影响后面电路稳定.两节干电池的供电电压在1.8V-3.2V左右 1.8V升3V升压芯片方案, 如P ...