SpringBoot中通过Filter新增请求参数SpringBoot中通过Filter新增请求参数
SpringBoot中,可以通过Filter实现对请求参数的加强,包括新增及修改参数。
可以利⽤这个⽅式,实现在SpringBoot中预防攻击对有⼯具性的参数进⾏调整。
另外,利⽤这种⽅式,还可以实现对必须传⼊的参数设置初始值。
实现⽅式:
通过实现javax.servlet.http.HttpServletRequestWrapper类来实现
实现步骤:
1. 新建⼀个类,实现javax.servlet.http.HttpServletRequestWrapper类,并重写相关⽅法
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
public class MyParamsWraper extends HttpServletRequestWrapper {
//这⾥map需要指定为 Map<String, String[]> 类型
private Map<String, String[]> params = new HashMap<>();
/**
* 构造⽅法,将原有请求中的参数复制到当前类的params中
* @param request
*/
public MyParamsWraper(HttpServletRequest request) {
super(request);
params.ParameterMap());
}
public void addParameter(String key, Object value) {
if(value != null) {
this.params.put(key, new String[] {String.valueOf(value)});
}
}
/**
* 如果在SpringBoot中⽤对象来接收参数,这个⽅法就必须重写
* @return
*/
@Override
public Enumeration<String> getParameterNames() {
return new Vector(this.params.keySet()).elements();
}
/**
* 这个⽅法必须重写
* @param name
* @return
*/
@Override
public String[] getParameterValues(String name) {
String[] values = (name);
if((values == null) || (values.length == 0)) {
return null;
}
return values;
}
}
2. 向SpringBoot中添加⼀个过滤器
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
//使⽤@WebFilter注解向SpringBoot中添加Filter
//urlPatterns :要过滤的请求路径
@WebFilter(filterName = "paramsFilter", urlPatterns = "/params")
public class ParamsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filt
erChain) throws IOException, ServletException {        //新建⼀个⾃⼰定义的HttpServletRequestWrapper对象,将当前的servletRequest传进去
MyParamsWraper requestParamsWrapper = new MyParamsWraper((HttpServletRequest) servletRequest);
//添加参数
requestParamsWrapper.addParameter("param1", "1111");
requestParamsWrapper.addParameter("param2", "2222");
//执⾏Filter,这⾥传⼊的Reqeust为刚才新建的⾃定义的HttpServletRequestWrapper对象
filterChain.doFilter(requestParamsWrapper, servletResponse);
}
@Override
public void destroy() {
}
}
3. 新建⼀个测试Controller进⾏测试
st.params.vo.ParamsVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
//测试Controller
//这⾥获取参数,可以分别获取,也可以⽤对象来接收
@RestController
public class ParamsController {
/
/    @GetMapping("/params")
//    public String params(@RequestParam(name = "param1") String param1,
//                        @RequestParam(name = "param2") String param2) {
//
springboot和过滤器//        System.out.println("param1 is " + param1);
//        System.out.println("param2 is " + param2);
//
//
//        return "params";
//    }
@GetMapping("/params")
public String params(ParamsVO params) {
System.out.println("param1 is " + Param1());
System.out.println("param2 is " + Param2());
return "params";
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。