SpirngMVC框架下使用filter对字符进行过滤
来源:互联网 发布:手机版word软件 编辑:程序博客网 时间:2024/06/05 19:22
1、 思路
在一个Filter中将HttpServletRequest 里的所有参数都取出来分别进行过滤然后再放回到该HttpServletRequest 中。
2、 具体实现
1) 首先继承OncePerRequestFilter实现自定义的Filter
public class TestFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { ModifyParametersWrapper escapeScriptwrapper = new ModifyParametersWrapper(request); filterChain.doFilter(escapeScriptwrapper,response); } private class ModifyParametersWrapper extends HttpServletRequestWrapper { private Map<String, String[]> parameterMap; // 所有参数的Map集合 public ModifyParametersWrapper(HttpServletRequest request) { super(request); parameterMap = request.getParameterMap(); } @Override public Enumeration<String> getParameterNames() { Vector<String> vector = new Vector<String>(parameterMap.keySet()); return vector.elements(); } @Override public String getParameter(String name) { String[] results = parameterMap.get(name); if (results == null || results.length <= 0) return null; else { System.out.println("修改之前: " + results[0]); return modify(results[0]); } } //SpringMVC的@RequestParam注解本质上调用的是ServletRequest中的 getParameterValues(String name) 方法 @Override public String[] getParameterValues(String name) { String[] results = parameterMap.get(name); if (results == null || results.length <= 0) return null; else { int length = results.length; //对request中的字符进行过滤 for (int i = 0; i < length; i++) { System.out.println("修改之前2: " + results[i]); if(results[i].contains("sb")){ results[i]=results[i].replaceAll("sb", "**"); } results[i] = modify(results[i]); } return results; } } private String modify(String string) { return "Modified: " + string; } }}2) Controller部分
@RequestMapping("/show") public String helloSpring4(HttpServletRequest request, @RequestParam(required =true)String author, @RequestParam(required =false)String email, @RequestParam(required =false)String url, @RequestParam(required =false)String comment){ request.setAttribute("author",author); request.setAttribute("email",email); request.setAttribute("url",url); request.setAttribute("comment",comment); return "show"; }3) 在配置文件中对自定义的Filter进行配置
</filter-mapping> <filter> <filter-name>testFilter2</filter-name> <filter-class>com.mlxp.filter.TestFilter</filter-class> </filter> <filter-mapping> <filter-name>testFilter2</filter-name> <url-pattern>*</url-pattern> </filter-mapping>3、实现效果
4、Point
过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。
拦截器:依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
这里是demo的地址
阅读全文
0 0
- SpirngMVC框架下使用filter对字符进行过滤
- spark scala 对dataframe进行过滤----filter方法使用
- 使用过滤器对所有请求进行字符编码过滤
- PCL:使用VoxelGrid filter对点云进行下采样
- 使用Filter进行 过滤非法登录用户
- Filter中对字符编码过滤解决中文乱码问题
- Filter过滤非法字符
- Filter过滤敏感字符
- 对json数组进行排序和filter过滤
- 对json数组进行排序和filter过滤
- spark scala 对RDD进行过滤----filter使用方法
- Filter 用户权限进行过滤
- 4.使用Filter过滤字符或浏览量统计
- 使用Filter对Request进行统一编码
- 使用Filter对Request进行统一编码
- 使用jsonConfig对 object进行过滤
- PHP中使用Filter进行数据安全过滤
- PHP中使用Filter进行数据安全过滤
- git commit -m 'comment' 遇到 'npm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- Func<>结合Dictionary使用
- 转:sklearn中的模型评估
- kotlin实现的简单个人账户管理APP(三) 自定义View仿支付宝的密码输入框/密码相关逻辑
- iOS UITextView 随键盘弹出界面上移
- SpirngMVC框架下使用filter对字符进行过滤
- 正则表达式 替换两标签为空
- shiro 实例 并发登录篇
- 指针阅读技巧分析
- Nginx Location指令URI匹配规则详解
- Spring Boot集成mongoDB(十二)
- Objective-C(基础篇)九大基本类型
- 机器学习/深度学习/自然语言处理学习路线
- mxnet设置动态学习率(learning rate)