问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何修改request中parameter

发布网友 发布时间:2022-04-23 05:31

我来回答

1个回答

热心网友 时间:2022-07-12 01:23

request之所以不想让你修改parameter的值,就是因为这个东西一般不然改,有人问我为什么不让改,表面上说我只能说这属于篡改数据,因为这个使用户的请求数据,如果被篡改就相当于篡改消息,如果你一天给别人发消息发的是:你好,而对方收到的是:*you!,你会怎么想,呵呵!当然它主要是怕不安全把参数数据该乱了,因为程序员毕竟是自己写程序,尤其是在公共程序里面写,后台程序员发现自己的数据不对,也找不到原因;一般WEB应用会提供一个attribute来提供自己的参数设置,这样就OK了,但是有些人就是那么*说为啥就不能改呢,面向对象不是相互的么,有get应该有set的呀,我只能说,面向对象来自于生活现实,生活现实中每天逛大街,街上有很多形形色色如花似玉的,但是又可能你只能看,不能摸,更不能XX,呵呵,否则一个异常就出来了:臭流氓!呵呵,不过就技术的角度来讲,能实现吗,当然可以,没有不可以实现的,源码之下,了无秘密,这是一个大牛说的,那么我们先来思考下有那些实现的方式:1、我自己new一个request,然后放到容器里头,放那呢?等会来说,先记录下。2、如果我能改掉request里面的值,那就好了呗,好的,先记录下,等会来想怎么改。先说第一种方式,我自己new一个,呵呵,怎么new,怎么让其他的程序知道。new的两种方式之一(开始思考的起源):先说new的方式,在不知道具体的容器怎么实现HttpSevletRequest的时候,很简单,我自己写个类,implementsHttpServletRequest呵呵,这个貌似很简单,OK,继承下试一试:publicclassHttpServletRequestExtendimplementsHttpServletRequest{.实现代码}此时提示需要有N多方法需要被实现,例如:getParameter、getAttribute、getAttributeNames、getCharacterEncoding、getContentLength、getContentType。。。。。。等等几十个方法,呵呵;当然,你可以再构造方法里面将实际的request对象传递进来,如果是相同的方法,就这个request来实现,如果需要自己处理的方法,就按照自己的方式来处理,这种包装貌似简单自己定义parameter,就用一个privateMapparamterMap=newHashMap();就可以简单搞定,自己再搞个addParameter方法等等,就可以实现自己的功能。不过写起来挺费劲的,因为意味着你所有的方法都要去实现下,除非你其他的方法都不用,只用其中几个方法而已,这就体现出一些接口的不足了。但是这种方式是可行的,至少可以这样说,只是很费劲而已,因为感觉冗余很厉害,也体现出接口的不足,和抽象类的价值,我们想要的只是重载那些我们想要重载的,原有的还是按照它原有的处理思路,此时,有一个叫HttpServletRequestWrapper的出现了;new方式2:继承HttpServletRequestWrapper,其实就是上面那种方法多了一层继承,将你的重复工作交予了它,你也可以这样做,全名为:javax.servlet.http.HttpServletRequestWrapper,看来也是一个扩展的通用接口,也就是会对request做一次包装,OK;跟着进去发现它可以处理类似request一样的差不多的内容,在这个基础上做了一次包装,你可以认为他就是对你自己new的那个,多了一层简单扩展实现,而你再这个基础上,可以继续继承和重写。OK,此时你要重写如何重写呢,比如我们要重写一个getParameter方法和getParameterValues方法,其余的方法保持和原来一致,我们在子类中,自己定义一个Map用来放参数,结合request本身的参数,加上外部其他自定义的参数,做成一个新的参数表。如下所示:importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletRequestWrapper;importjava.util.HashMap;importjava.util.Map;publicclassParameterRequestWrapperextendsHttpServletRequestWrapper{privateMapparams=newHashMap();@SuppressWarnings("unchecked")publicParameterRequestWrapper(HttpServletRequestrequest){//将request交给父类,以便于调用对应方法的时候,将其输出,其实父亲类的实现方式和第一种new的方式类似super(request);//将参数表,赋予给当前的Map以便于持有request中的参数this.params.putAll(request.getParameterMap());}//重载一个构造方法publicParameterRequestWrapper(HttpServletRequestrequest,MapextendParams){this(request);addAllParameters(extendObject);//这里将扩展参数写入参数表}@OverridepublicStringgetParameter(Stringname){//重写getParameter,代表参数从当前类中的map获取String[]values=params.get(name);if(values==null||values.length==0){returnnull;}returnvalues[0];}publicString[]getParameterValues(Stringname){//同上returnparams.get(name);}publicvoidaddAllParameters(MapotherParams){//增加多个参数for(Map.Entryentry:otherParams.entrySet()){addParameter(entry.getKey(),entry.getValue());}}publicvoidaddParameter(Stringname,Objectvalue){//增加参数if(value!=null){if(valueinstanceofString[]){params.put(name,(String[])value);}elseif(valueinstanceofString){params.put(name,newString[]{(String)value});}else{params.put(name,newString[]{String.valueOf(value)});回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...乙肝表面抗体和乙肝核心抗体同显阳性,其余三项为阴性说明了什么... 确认劳动关系原告可以是多人吗 华为p7_l09的时间如何调整 什么地方卖毛线 如何订购毛线 顾景舟石瓢壶多少价 ...这个日期什么格式 Java 中怎么日期 转换成这样子呢如:2013-06-27... java中用正则表达式匹配并输出的时间怎样拿到别的方法里进行计算。例... Java程序 题目:星期计算器的实现。实现要点:输入一个2013-05-01后的日... 半夜敷面膜这些星座就是这样被吓死的 嘉兴市参保信息查询 网络连接1394网络适配器 关于request.getParameter方法,帮忙解答 嘉兴社保查询个人账户查询 1394网络适配器 怎么使用 如何修改request的parameter的几种方式 嘉兴市社保查询网址 1394网络适配器是什么 javaweb查询输入空格+条件时查不结果怎么办 嘉兴社保局网上查询 java,Filter中改变了参数,但接口类里获取不到 嘉兴个人社保缴费查询 为什么要继承HttpServletRequestWrapper类而不是实现HttpServletRequest接口 嘉兴的社保在网上怎么查啊 servlet重定向带请求header 浙江嘉兴个人社保查询个人账户 java修改请求参数的值 嘉兴怎么自己查社保 request转换问题 浙江嘉兴个人社保市民卡查询 1394网络适配器 嘉兴市社保卡查询官网 请直播分机号码,查号请拨零是什么意思 关于1394网络适配器 请问如何在网上查询浙江嘉兴的社会保险 求request.setAttribute()的jdk 实现源码没找到,还有jdk 源码中有的属性 1394 网络适配器 浙江嘉兴养老保险查询个人账户 jsp内置的request对象实际什么类型啊 1394网络适配器的作用 浙江嘉兴市社保查询 1394网络适配器问题 嘉兴社保卡号查询系统 Spring拦截器拦截请求,得到HttpServletRequest对象,获得加密的参数,怎 ... 1394网络适配器有什么用? 嘉兴网上查社保怎么查 request.getparameter("xxxx");属于哪个类 1394网络适配器的使用 嘉兴社保个人查询 request.setAttribute("test", "test");这句语句是什么意思?我在myeclipse里没找到有关于text的信息