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, 静态图片文件 ...
随机推荐
- 被自己以为的GZIP秀到了
问题的开始 我司某产品线有这么一个神奇接口 (https://host/path/customQuery) 该接口在预发或线上缓存正常的情况下TTFB为150ms左右(可以认为服务处理时间差不多就是T ...
- mysql5.7.20压缩版安装
1.官网下载.zip格式的MySQL Server的压缩包,选择x86或x64版,并解压. 2. 创建 data文件夹 及 my.ini文件,并编辑 [mysqld] # 设置为自己MYSQL的安装目 ...
- Android网络笔记
(1)网络状态: ConnectivityManager负责管理所有连接的服务(如:系统服务,3G/4G,WiFi,蓝牙等).查看网络状态的类是NetWorkInfo,它是通过Connectivity ...
- [每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- linq to entity不识别方法"System.String ToString()"
将班级id以字符串形式输入如:"1111,1112,1113".数据库里的id为int型,在数据路里找到匹配的相应班级转换成列表.在这里爆出问题:不识别方法"System ...
- tree 中文(转)
原文:http://www.dutor.net/index.php/2009/05/tree-cn-code/ 简介: tree命令可以以目录树的形式显示指定(默认显示这个文件系统)目录的所有文件夹和 ...
- oracle range分区表已经有了MAXVALUE 分区,如何添加分区?要不能删除MAXVALUE分区里的数据,不影响在线应用。
来做个实验说明该问题:1.创建个分区表SQL> create table p_range_test 2 (id number,name varchar2(100)) 3 partition by ...
- LeetCode167 两数之和 II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值 ...
- Flutter 应用入门:计数器
用Android Studio创建的Flutter应用模板默认是一个简单的计数器示例. // 导入包 import 'package:flutter/material.dart'; // 应用入口,启 ...
- 【Oracle】查看表或视图的创建语句
这里用到的是Oracle的DDL语句的用法 用于获得某个schema下所有的表.索引.视图.存储过程.函数的DDL set pagesize 0 set long 90000 set feedback ...