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

北京市保障性住房建设投资中心网站6扫一扫内饰图片识别车型

北京市保障性住房建设投资中心网站6,扫一扫内饰图片识别车型,制作网页设计公司,江苏山海连云建设有限公司网站​ 介绍 HttpServletRequestWrapper 实现了 HttpServletRequest 接口#xff0c;可以让开发人员很方便的改造发送给 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 类去重写getParameterValuesgetParameter等方法实际还是调用HttpServletRequest的相对应方法但是可以对方法的结果进行改装。一般要和 Filter 配合应用 应用场景 需要修改客户端请求参数的场合例如 将不支持的语言参数修改为默认语言将加密的 DeviceId 解密并解析出其中的 imei 和 sn同时在客户端请求里添加这 2 个参数 ** deviceId hex(rc4(imei ‘_’ sn)) 示例 就以上面所说的解密 DeviceId 为例 web.xml 配置 添加一个解析 DeviceId 的 Filter !-- 解析加密的 deviceId 得到 imei 和 sn --filterfilter-namedeviceIdParseFilter/filter-namefilter-classcom.xxxxxx.DeviceIdParseFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-paraminit-paramparam-nameforceEncoding/param-nameparam-valuetrue/param-value/init-param/filterfilter-mappingfilter-namedeviceIdParseFilter/filter-nameurl-pattern*.do/url-pattern/filter-mappingFilter 代码 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 {ResponseBodyRequestMapping(test.do)public Result test(String deviceId, String imei, String sn) {MapString, 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?reqno123456imeiimeisn1001modelmx6osflyme6ver1.0.0localeen_US返回结果 {code: 200,message: ,redirect: ,value: {sn: 1001,imei: imei,deviceId: null} }请求参数包含 deviceId。请求 url http://xxxxxxx.com/api/test.do?reqno123456sn1001modelmx6osflyme6ver1.0.0localeen_USdeviceId7cfbf5cbd70bcf1c006d7d0aa77688518444497a2b45683ea41ce690e92d6d38返回结果 {code: 200,message: ,redirect: ,value: {sn: 111,imei: org.testng.annotations.Test;,deviceId: 7cfbf5cbd70bcf1c006d7d0aa77688518444497a2b45683ea41ce690e92d6d38} }可以看到 请求参数里不存在的 imei 能获取到值请求参数里存在的 sn 值被修改了
http://www.dnsts.com.cn/news/73669.html

相关文章:

  • 企业网站建设的优缺点做ppt好的网站有哪些内容
  • 网站建设顺利交付百度商店
  • 包头做网站的公司做策划需要进的网站
  • 网站 dns 解析wordpress网站数据库
  • app优化推广石家庄seo网站优化公司
  • 服装网站建设企业需求调查织梦php网站模板修改
  • 厦门外贸网站seo4p营销理论
  • 做请帖网站wordpress 搬瓦工
  • 关于手机的网站有哪些内容qianhu微建站
  • 做企业网站设计价格是多少经典包装设计案例解析
  • 泰安网站搭建公司河北省城乡与住房建设厅网站
  • 网站模板内容怎么改购物网站开发需求分析
  • 足球比方类网站开发烘焙食品网站建设需求分析
  • 中建二局核电建设分公司网站上海网站建设极简慕枫
  • 现在做什么网站好郑州做网站第一人
  • 用h5做的网站樟木头东莞网站建设
  • 自适应网站开发框架做旅游的网站的目的和意义
  • 网站源码出售网站提高收录和访问量
  • 做一个搜索引擎网站要多少钱企业为什么要建立集团
  • 网站制作详细过程什么情况下需要建设网站
  • 有了域名之后怎么做自己的网站网站返回404是什么意思
  • 设计网站公司好评y湖南岚鸿okwordpress增肥主题
  • 建筑企业登录哪个网站网站页面素材
  • 舟山建设工程信息网站wordpress新手建站
  • 建个营销型网站多少钱ui设计与制作
  • 河南河南省住房和城乡建设厅网站沁县网站建设
  • 搜狗网站推广比较好的装修公司
  • 做网站win7好用么美化版wordpress
  • 如何自己做众筹网站国外域名交易网站
  • 温州网站建设风格网站建设 html5