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);}}
}
完~
转载于:https://www.cnblogs.com/fron/p/filter-20170224.html
Filter过滤器除去部分URL链接相关推荐
- php 验证url,php过滤器filter验证邮箱、url和ip地址等
1.验证邮箱 复制代码 代码示例: $email = 'sjlinyu@qq.com'; $result = filter_var($email, FILTER_VALIDATE_EMAIL); va ...
- 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源
从下载安装开始的所有笔记. 其实 Flask 的示例程序算是 MVC 模式的. Model 是 ORM, V 是 Template, C 是 url route 和 request handler. ...
- Flask_day_2渲染Jinja2模板和传参(if判断、for循环、过滤器、继承和block、URL链接)
***Flask渲染Jinja2模板和传参: 1.如何渲染模板 *模板放在'templates'文件夹下 *在'flask'中导入'render_template' *在视频函数中,用'render_ ...
- 详谈 Filter 过滤器
详谈 Filter 过滤器 文章首发在CSDN博客,转载请务必注明以下所有链接,否则考虑法律追究责任. CSDN地址:http://blog.csdn.net/tzs_1041218129/artic ...
- jsp filter 过滤器
过滤器的作用是什么? 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet.过滤器也可以附加到 JavaSe ...
- Shiro笔记五:Shiro内置Filter过滤器
Shiro笔记五:Shiro内置Filter过滤器 shiro内置的过滤器 核心过滤器类:DefaultFilter,配置哪个路径对应哪个拦截器进行处理. authc:org.apache.shiro ...
- [JAVA EE] Filter过滤器
Filter过滤器 ◼ 过滤器(Filter)可以动态地拦截请求和响应. ◼ 应用场景:过滤敏感词汇.防止SQL注入.设置字符编码.进行URL级 别的权限访问控制.压缩响应信息等. 启动文件DemoA ...
- javaweb学习总结(四十二)——Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- spring boot Filter过滤器的简单使用
springboot使用Filter过滤器有两种方式: 一种是实现Filter接口然后通过@Component注解向项目加入过滤器 另一种是通过配置类来配置过滤器 @Component public ...
最新文章
- 三菱fx2n64mr说明书_三菱FX2N可编程控制器使用手册
- 第十六届全国大学生智能车竞赛创意组别-航天智慧物流
- 粽子机器人视频教程_包粽子服务机器人的制作方法
- 14岁上大学,29岁拿下教职,如今这位华裔学者拿下Jeffrey Elman大奖
- 【Webkit Blog翻译】深入研究WebRTC | 内有福利
- systemctl 命令完全指南
- 2019 Multi-University Training Contest 1 - 1011 - Function - 数论
- vscode 连接docker_在VS Code中使用带Docker容器的Java开发环境 – Bruno Borge
- 索尼收购挪威公司Nevion 进一步增强其业务组合
- E4/EAS/Eventing System 事件系统
- jQuery源码高清视频教程
- MQTT协议报文格式解析
- synchronized 关键字与GuardedBy注解的关系
- 前端面试官常问javaScript编程题,隔壁王大爷看了都会了
- 23年教资面试开始啦个人报名流程
- css鼠标划过时的一些小特效
- 从Hadoop到Spark和Flink,大数据处理框架十年激荡发展史
- TOC视角:巴顿将军的管理角色-----项目关键链(转)
- PHP 规则引擎 Hoa\Ruler
- fps游戏通用内存自瞄算法的原理与C++实现
热门文章
- Spring容器创建流程(6)国际化支持
- Unity3D中JavaScript与C#对比
- jsp用户登录验证_Java之使用过滤器进行登录验证
- pycharm+python3.7+pyqt配置_Python3+Pycharm+PyQt5环境搭建步骤图文详解
- Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析
- html的div块float后宽度无效,行内元素(例如)设置float之后才能用width调整宽度...
- php中crypt怎么还原,PHP笔记 —— crypt方法
- oracle job 每月前十天运行_Tensorflow源码解析7 -- TensorFlow分布式运行时
- 95-20-010-协议-Kafka的Request和Response
- 05-不是内部或外部命令,也不是可运行的程序或批处理文件