使用filter拦截参数去掉两端的空格(资料+亲测解决)
来源:互联网 发布:c图形化编程 编辑:程序博客网 时间:2024/05/06 05:21
使用filter拦截参数去掉两端的空格(解决)
问题:
1、当前环境:springMVC + spring
2、所有从前台输入的参数数据,都要去除两端的空格
思考:
1.使用拦截器拦截request,然后通过get参数列表trim去除空格。创建后发现根本没法将trim后的参数设置回request中去。(试过之后放弃)
2.在每个 bean 中使用 get方法 参数trim ,非bean参数 每个单独 trim (想想就觉得麻烦,放弃)
3.通过 过滤器+重写HttpServletRequestWrapper类,将修改后的参数列表写回request中 (过滤器和拦截器都可以完成,实际上我第一种想法是可行的,httpServletRequestWrapper类可以将参数写回request中)
解决:(通过网上大神博客,自己验证,确实可用,一下为我的demo)
1.创建过滤器,拦截方法,提过调用我们自己的代有trim方法的类。
2.编写获取参数并去空格然后写回request的实现类。
3.在web.xml中配置,是这个filter生效。放在org.springframework.web.filter.CharacterEncodingFilter类之后,否则返回的参数乱码
功能代码完成。
4.测试代码
(1)、jsp页面:
(2)controller代码
(3)model
问题:
1、当前环境:springMVC + spring
2、所有从前台输入的参数数据,都要去除两端的空格
思考:
1.使用拦截器拦截request,然后通过get参数列表trim去除空格。创建后发现根本没法将trim后的参数设置回request中去。(试过之后放弃)
2.在每个 bean 中使用 get方法 参数trim ,非bean参数 每个单独 trim (想想就觉得麻烦,放弃)
public String getUsername() { return username==null?null:username.trim(); }
3.通过 过滤器+重写HttpServletRequestWrapper类,将修改后的参数列表写回request中 (过滤器和拦截器都可以完成,实际上我第一种想法是可行的,httpServletRequestWrapper类可以将参数写回request中)
解决:(通过网上大神博客,自己验证,确实可用,一下为我的demo)
1.创建过滤器,拦截方法,提过调用我们自己的代有trim方法的类。
package top.demo.interceptor;
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 ParamsFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { //只是我们自己写的param参数去除空格并写回的类 ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper(request); filterChain.doFilter(requestWrapper, response); } }
2.编写获取参数并去空格然后写回request的实现类。
package top.demo.interceptor;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);<span style="white-space:pre"></span>//这里将扩展参数写入参数表 } public void modifyParameterValues(){<span style="white-space:pre"></span>//将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中配置,是这个filter生效。放在org.springframework.web.filter.CharacterEncodingFilter类之后,否则返回的参数乱码
<!-- 过滤参数的两端空格 --><filter> <filter-name>ParamsFilter</filter-name> <filter-class>top.lushunde.interceptor.ParamsFilter</filter-class> </filter> <filter-mapping> <filter-name>ParamsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
功能代码完成。
4.测试代码
(1)、jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>用户登录</title></head><body> <form action="${pageContext.request.contextPath}/user/login" method="post" id="mainForm" > 用户名:<input type="text" name="username" value=""/> </br> 密码 :<input type="text" name="password" value=""/></br> 验证码:<input type="text" name="yzm" value=""/></br> <input type="submit" value="提交"/></br> 显示:|${param }| </form> </body></html>
(2)controller代码
package top.lushunde.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import top.lushunde.model.User;@Controller@RequestMapping("/user")public class UserController { //处理登录表单 @RequestMapping(value = "/login",method = RequestMethod.POST) public String login(HttpServletRequest request, User user,String yzm){ System.out.println(user.toString()+"yzm:"+yzm); request.setAttribute("param", user.toString()+"yzm:"+yzm); return "/user/login"; }}
(3)model
package top.lushunde.model;public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "username:"+username+"password:"+password; }}
0 0
- 使用filter拦截参数去掉两端的空格(资料+亲测解决)
- 【字符串】去掉字符串两端的空格trimSpace
- js 去掉两端空格
- JavaScript去掉两端空格方法
- 去掉字符串两端的空格,或其它字符
- java 模拟trim去掉字符串两端的空格
- 去掉字符串第一个非空格字母 和最后一个非空格字母两端的空格
- 在JS中去掉两端空格
- JavaScript中去掉字符串两端空格(trim)
- 【每日N题】完成一个trim函数,将字符串两端的空格、回车、tab符号去掉
- 完成一个trim_string函数,将一个字符串两端的空格、回车、tab符号去掉。
- 去除字符串两端的空格
- 删除左右两端的空格
- 除去字符串两端的空格
- 去除字符串两端的空格(正则表达式法)
- java 去掉字符串的空格(中间空格,左右空格)
- html:optionsCollection 的 filter 过滤属性使用心得 - 解决空格不能显示的问题
- shell awk用法及 去掉linux系统vi中出现^M字符的方法 shell去除字符串两端空格
- Android ButterKnife依赖注入框架简单使用
- 10进制转化为-2进制
- 使用brew安装软件
- I2C总线协议详解
- android 情景模式设置
- 使用filter拦截参数去掉两端的空格(资料+亲测解决)
- maven failed to execute goal on project
- JavaWeb学习总结
- 【LeetCode】198. House Robber
- 云存储应用场景全总结 – 音视频篇
- hdu 5890 Eighty seven(背包+bitset)
- Java 正则表达式详解
- 微信公众号的学习
- 【IOS学习】 IOS的四种数据存储方式及优劣