当前位置: 首页 > news >正文

男男床做视频网站在线建设部网站继续教育

男男床做视频网站在线,建设部网站继续教育,wordpress 获取有图片的文章,东莞php网站建设​ 介绍 HttpServletRequestWrapper 实现了 HttpServletRequest 接口,可以让开发人员很方便的改造发送给 Servlet 的请求.HttpServletRequest 对参数值的获取实际调的是org.apache.catalina.connector.Request没有提供对应的set方法修改属性所以不能对前端传来的参…

介绍

  • HttpServletRequestWrapper 实现了 HttpServletRequest 接口,可以让开发人员很方便的改造发送给 Servlet 的请求.HttpServletRequest 对参数值的获取实际调的是org.apache.catalina.connector.Request没有提供对应的set方法修改属性所以不能对前端传来的参数进行修改,实际场所像过滤xss攻击,取认证token统一去除token前缀等需要进行请求参数的处理,此时HttpServletRequestWrapper 就应运而生了。
  • 应用了装饰模式.HttpServletRequestWrapper 采用装饰者模式对HttpServletRequest进行包装,我们可以通过继承HttpServletRequestWrapper 类去重写getParameterValues,getParameter等方法,实际还是调用HttpServletRequest的相对应方法,但是可以对方法的结果进行改装。
  • 一般要和 Filter 配合应用

应用场景

需要修改客户端请求参数的场合,例如

  • 将不支持的语言参数修改为默认语言
  • 将加密的 DeviceId 解密,并解析出其中的 imei 和 sn,同时在客户端请求里添加这 2 个参数
    ** deviceId = hex(rc4(imei + ‘_’ + sn))

示例

就以上面所说的解密 DeviceId 为例

web.xml 配置

添加一个解析 DeviceId 的 Filter

<!-- 解析加密的 deviceId 得到 imei 和 sn --><filter><filter-name>deviceIdParseFilter</filter-name><filter-class>com.xxxxxx.DeviceIdParseFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>deviceIdParseFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>

Filter 代码

public class DeviceIdParseFilter implements Filter {private static final String KEY = "xxxxxxx";private static final Logger log = Logger.getLogger(DeviceIdParseFilter.class);private static final String[] DEFAULT_RESULT = {"",""};@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {String deviceId = request.getParameter("deviceId");if (deviceId != null && deviceId.length() > 0) {String[] result = parseDeviceId(deviceId);DeviceIdParseRequest req = new DeviceIdParseRequest((HttpServletRequest) request,result[0], result[1]);chain.doFilter(req, response);} else {chain.doFilter(request, response);}}/*** * 从 deviceId 里解析出 imei 和 sn* * imei = result[0]* sn   = result[1]* * * @param deviceId* @return*/private static final String[] parseDeviceId(String deviceId) {try {String src = Rc4Util.decrypt(deviceId, KEY);if (src.indexOf('_') >= 0) {return src.split("_");}} catch (Exception e) {log.error(e, e);}return DEFAULT_RESULT;}@Overridepublic void destroy() {}}

这个 Filter 会将包含 deviceId 参数的请求进行如下处理

  • 将 deviceId 的值用 RC4 进行解密
  • 从解密出来的 deviceId 里解析出 imei 和 sn
  • 将请求改造成 DeviceIdParseRequest,这就是我们的 HttpServletRequestWrapper
    而不包含 deviceId 参数的请求不做任何处理

HttpServletRequestWrapper 代码

public class DeviceIdParseRequest extends HttpServletRequestWrapper {private String imei;private String sn;/*** @param request*/public DeviceIdParseRequest(HttpServletRequest request) {super(request);this.imei = "";this.sn = "";}/*** @param request* @param imei* @param sn*/public DeviceIdParseRequest(HttpServletRequest request, String imei, String sn) {super(request);this.imei = imei;this.sn = sn;}@Overridepublic String getParameter(String name) {if ("imei".equals(name)) {return imei;} else if ("sn".equals(name)) {return sn;} else {return super.getParameter(name);}}@Overridepublic String[] getParameterValues(String name) {if ("imei".equals(name)) {return new String[] { imei };} else if ("sn".equals(name)) {return new String[] { sn };} else {return super.getParameterValues(name);}}}

这里针对 imei 和 sn 进行了特殊处理,返回的不是客户端提交的参数,而是在 Filter 里通过解析 deviceId 得到的 imei 和 sn

需要注意的是

  • 如果用 request.getParameter() 获取客户端请求参数的值,那么只需要重写该方法就行了
  • 如果用 SpringMVC 的 @RequestParam 注解来获取请求参数的值,那么需要重写 getParameterValues 方法:因为 SpringMVC 是用这个方法来获取参数值的

运行结果

用于测试的 controller

这个测试类把接收到的参数直接返回

@Controller
@RequestMapping("/api/")
public class TestController {@ResponseBody@RequestMapping("test.do")public Result test(String deviceId, String imei, String sn) {Map<String, String> map = new HashMap<>();map.put("deviceId", deviceId);map.put("imei", imei);map.put("sn", sn);return new Result(map);}}

请求参数不包含 deviceId.请求 url 如下:

http://xxxxx.in.xxxxx.com/api/test.do?reqno=123456&imei=imei&sn=1001&model=mx6&os=flyme6&ver=1.0.0&locale=en_US

返回结果

{"code": "200","message": "","redirect": "","value": {"sn": "1001","imei": "imei","deviceId": null}
}

请求参数包含 deviceId。请求 url

http://xxxxxxx.com/api/test.do?reqno=123456&sn=1001&model=mx6&os=flyme6&ver=1.0.0&locale=en_US&deviceId=7cfbf5cbd70bcf1c006d7d0aa77688518444497a2b45683ea41ce690e92d6d38

返回结果

{"code": "200","message": "","redirect": "","value": {"sn": "111","imei": "org.testng.annotations.Test;","deviceId": "7cfbf5cbd70bcf1c006d7d0aa77688518444497a2b45683ea41ce690e92d6d38"}
}

可以看到

  • 请求参数里不存在的 imei 能获取到值
  • 请求参数里存在的 sn 值被修改了
http://www.yayakq.cn/news/267934/

相关文章:

  • 南昌做网站的公司哪里好十大广告设计公司
  • 那个网站都有做莱的图片网站需求怎么做
  • 西安 域名空间网站制作海淀发布会
  • 怎么建立一个网站链接广告公司简介模板免费
  • 网站设计的指导思想佛山公司网站设计团队
  • 虫部落是谁做的网站建筑工程项目
  • 网站开发中标签栏的图标一般都在那个文件中写代码互展科技网站建设
  • 网站建设方案书doc模板电子商务网站建设与管理实验总结
  • 专门为98k做的网站seo优化分析
  • 网站建设考虑事项seo优化什么意思
  • 现在网站建设的技术wordpress wp option
  • 校园网站建设说明书怎么弄自己的微信小程序
  • 湖口县建站公司ppt可爱模板免费下载
  • 无锡网站建设收费杭州上城区抖音seo有多好
  • 企业电子商务网站建设和一般建材行业网站建设
  • 有用织梦做的大网站吗wordpress默认播放器
  • 蓝色汽车配件公司网站 模板营销网站竞品分析报告
  • 大学生做家教比较好的网站怒江企业网站建设
  • 简述网站制作流程wordpress炫简主题
  • 开源网站程序替别人做设计的网站多少钱
  • 建设视频网站费用小精灵网站在线做语文
  • 厦门公司做网站wordpress房产主题汉化版
  • 弄淘宝招牌图什么网站可以做怎么制作图片文件夹
  • 二手车网站开发过程软件外包公司如何接单
  • 装修网站模板源码蜜雪冰城推广软文
  • 网站建设有哪些公司江门网站建设推荐
  • 郑州响应式网站设计企业培训员工培训平台
  • 成都彭州网站建设手机怎么搭建网站源码
  • 广东网站快速备案如何建设局域网内部网站
  • 居士做网站上弦 网站建设