环境:JDK1.7 TOMCAT7 spring3.2
1.过滤器代码
1.1基于spring过滤器
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.filter.OncePerRequestFilter;
public class SessionFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper(request);
filterChain.doFilter(requestWrapper, response);
}
}
1.2基于javax.servlet.Filter
import java.io.IOException;
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;
/**
* Servlet Filter implementation class CommonFilter
*/
public class CommonFilter implements Filter {
/**
* Default constructor.
*/
public CommonFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
HttpServletRequest hr=(HttpServletRequest) request;
String url = hr.getServletPath().trim();
if (url.equals("xxx")){//不需要过滤的url,这里可以使用一个配置文件配置这些url,项目启动时读入内存一个map中,然后在这里进行判断
//我定义的是urlFilterMap,然后在这里urlFilterMap.containsValue(url)进行判断
chain.doFilter(hr, response);
}else{
ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper((HttpServletRequest)request);
chain.doFilter(requestWrapper, response);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
2.过滤器包装类
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map<String , String[]> params = new HashMap<String, String[]>();
@SuppressWarnings("unchecked")
public ParameterRequestWrapper(HttpServletRequest request) {
// 将request交给父类,以便于调用对应方法的时候,将其输出,其实父亲类的实现方式和第一种new的方式类似
super(request);
//将参数表,赋予给当前的Map以便于持有request中的参数
this.params.putAll(request.getParameterMap());
this.modifyParameterValues();
}
//重载一个构造方法
public ParameterRequestWrapper(HttpServletRequest request , Map<String , Object> extendParams) {
this(request);
addAllParameters(extendParams);//这里将扩展参数写入参数表
}
public void modifyParameterValues(){//将parameter的值去除空格后重写回去
Set<String> set =params.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()){
String key= (String) it.next();
String[] values = params.get(key);
values[0] = values[0].trim();
params.put(key, values);
}
}
@Override
public String getParameter(String name) {//重写getParameter,代表参数从当前类中的map获取
String[]values = params.get(name);
if(values == null || values.length == 0) {
return null;
}
return values[0];
}
public String[] getParameterValues(String name) {//同上
return params.get(name);
}
public void addAllParameters(Map<String , Object>otherParams) {//增加多个参数
for(Map.Entry<String , Object>entry : otherParams.entrySet()) {
addParameter(entry.getKey() , entry.getValue());
}
}
public void addParameter(String name , Object value) {//增加参数
if(value != null) {
if(value instanceof String[]) {
params.put(name , (String[])value);
}else if(value instanceof String) {
params.put(name , new String[] {(String)value});
}else {
params.put(name , new String[] {String.valueOf(value)});
}
}
}
}
3.web.xml配置
3.1 基于spring 配置
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.cnpc.oms.common.service.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.2基于javax.serlvet.Filter
<filter>
<filter-name>commonFilter</filter-name>
<filter-class>com.cnpc.oms.common.service.CommonFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>commonFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
对项目中的所有参数去除前后空格...可以基于此过滤器实现过滤跨站脚本攻击,参数的增加,修改!敏感词汇过滤。实现原理为重写HttpServletRequestWrapper,获取参数的方法。include和 Forwarded 内部转发不在过滤之内。
Spring环境中用Filter(过滤器)去除参数前后所有空格
1.增加选择题添加自动过滤答案区域空格功能 修改 1.整理了考试页面函数 修正 1.修正抽题函数中的一个BUG 2.修正无法批量删除题目的BUG V3.3Sp2(20100429) 修改 1.改良安装权限检测 修正 1.修正主观题评分判断分值...
增加了与Windows资源管理器的集成(加载加密卷,保存至加密卷,粉碎选择文件) 增加了悬浮框,支持拖放右键等功能 在子界面中增加了Banner 托盘菜单支持快速加载,支持加载历史记录,加载收藏卷等功能。 对加密卷...
3) 上传功能增加过滤显示的功能,文件列表将只会显示当前上传功能所允许上传类型的文件。如图片上传功能里文件列表将只会显示*.jpg、*.gif、*.png、*.bmp等图像文件。 4) 修正了上传功能中重命名文件的时候...
2)更强大的Word文档导入编辑器功能,无需特殊的服务器权限或安装客户端组件,只要拥有最基本的ASP.NET读写文件权限即可实现导入Word文档,并且还支持最新的DOCX文档格式! 3)更细致的工具栏区域划分! 4)全新的可隐藏...
去除了有关系统盘\系统驱动器部分(UEFI之后已无法支持之前实现方式) 增加加密卷擦除功能 增加密码生成器功能 增加了密码输入软键盘功能 增加了磁盘痕迹擦除工具 增加了悬浮框,支持拖放加载,右键功能菜单等。 ...
主要介绍了Asp.net MVC 如何对所有用户输入的字符串字段做Trim处理,需要的朋友可以参考下
1167 邮件配置参数中过滤空格字符 1208 项目中bug列表的优先级还是用图标来显示 1437 调整桌面提醒工具权限错误的提示 1358 计划列表页面描述里面P标签的margin去掉。 1433 调整项目各个操作的界面。 1343 从用例...
2)更强大的Word文档导入编辑器功能,无需特殊的服务器权限或安装客户端组件,只要拥有最基本的ASP.NET读写文件权限即可实现导入Word文档,并且还支持最新的DOCX文档格式! 3)更细致的工具栏区域划分! 4)全新的可...
参数 过滤器, 文本型, 可空, 格式:“MP3文件(*.mp3)|*.mp3|媒体文件(*.mpg)|*.mpg” .参数 初始路径, 文本型, 可空, 可以被省略。如果本参数被省略,默认从“我的文档”开始。否则,请给出盘符,如“d:” .子程序 ...
精易模块 V5.15 what’s new:(2015XXXX) 1、新增“线程_枚举”枚举指定进程ID中所有线程列表,成功返回线程数量,失败...10、新增“进程_取IO写入计数”,功能与XP系统下任务管理器一样。 11、新增“进程_取IO写入...
1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的translate方法的使用 18 1.10 过滤字符串中不属于指定集合...
3.12 去除字符串的前后空格 3.13 刷新时清空所有文本框 3.14 随意改变大小的文本框 3.15 文本框的自动全选 3.16 文本框滚动导航 3.17 按钮获取焦点 3.18 文本框获取焦点弹出下拉框 3.19 文本框简单的单击效果 3.20 ...
3.12 去除字符串的前后空格 3.13 刷新时清空所有文本框 3.14 随意改变大小的文本框 3.15 文本框的自动全选 3.16 文本框滚动导航 3.17 按钮获取焦点 3.18 文本框获取焦点弹出下拉框 3.19 文本框简单的单击效果 3.20 ...
9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意类型。 10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text....
85 <br>0131 巧截字符串的数字 86 <br>0132 如何存储变长字符串 86 <br>0133 在进行字符串比较时忽略大小写 87 <br>0134 如何去除字符串尾空格 87 <br>0135 如何去掉字符串中所有空格 ...
实例299 多功能查询过滤器 396 9.2 查询变量 401 实例300 利用变量查询字符串数据 402 实例301 利用变量查询字符串型数据 403 实例302 利用变量查询日期型数据 404 9.3 数据前若干名 406 实例303 查询...