java中request设置请求参数

x33g5p2x  于2021-08-23 转载在 Java  
字(2.0k)|赞(0)|评价(0)|浏览(188)

request之所以不想让你修改parameter的值,就是因为这个东西一般不然改,有人问我为什么不让改,表面上说我只能说这属于篡改数据,因为这个使用户的请求数据,如果被篡改就相当于篡改消息,如果你一天给别人发消息发的是:你好,而对方收到的是:骂人得语言!,你会怎么想,呵呵!当然它主要是怕不安全把参数数据该乱了,因为程序员毕竟是自己写程序,尤其是在公共程序里面写,后台程序员发现自己的数据不对,也找不到原因;一般WEB应用会提供一个attribute来提供自己的参数设置,这样就OK了,但是有些人就是那么bian态说为啥就不能改呢,面向对象不是相互的么,有get应该有set的呀,我只能说,面向对象来自于生活现实,生活现实中每天逛大街,街上有很多形形色色如花似玉的,但是又可能你只能看,不能摸,更不能XX,呵呵,否则一个异常就出来了:臭牛氓!(转自http://www.importnew.com/19023.html)

解决方案: 继承HttpServletRequestWrapper,其实就是上面那种方法多了一层继承,将你的重复工作交予了它,让过滤链使用自定义request继续执行

代码如下

public class AMHttpServletRequestWrapper extends HttpServletRequestWrapper {
Map<String, String[]> params = null;
 
public AMHttpServletRequestWrapper(HttpServletRequest request, Map inParam) {
    super(request);
    params = new HashMap(inParam);
}
 
public void setParameter(String key, String value) {
    params.put(key, new String[]{value});
}
 
public void setParameter(String key, String[] values) {
    params.put(key, values);
}
 
@Override
public String getParameter(String name) {
    Object v = params.get(name);
    if (v == null) {
        return null;
    } else if (v instanceof String[]) {
        String[] strArr = (String[]) v;
        if (strArr.length > 0) {
            return strArr[0];
        } else {
            return null;
        }
    } else {
        return v.toString();
    }
}
 
@Override
public Map<String, String[]> getParameterMap() {
    return params;
}
 
@Override
public Enumeration<String> getParameterNames() {
    Vector l = new Vector(params.keySet());
    return l.elements();
}
 
@Override
public String[] getParameterValues(String name) {
    return params.get(name);
}
}

过滤器方法:

@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest http_req = (HttpServletRequest)request;
        AMHttpServletRequestWrapper amHttpServletRequestWrapper = new AMHttpServletRequestWrapper(http_req, 				http_req.getParameterMap());
		chain.doFilter(amHttpServletRequestWrapper, response);
}

amHttpServletRequestWrapper.setParameter( entry.getKey(), (String)entry.getValue());

设值即可

源码: https://github.com/gcWpengfei/spring-cloud-rsa-aes-demo/blob/master/aes-rsa-client/src/main/java/com/wpf/filter/RequestFilter.java

出处:https://blog.csdn.net/qq_33212500/article/details/80455565

相关文章

热门文章

更多