ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Java中apper的使用与原理详解

Java中apper的使用与原理详解 在Java这个编程语言的环境里, 咱们来仔细说说apper这个东西怎么个用法, 还有它背后是啥原理。更新时间这个信息是在2024年01月10日当天的08点47分19秒产生的, 当时的作者是爱着的这位朋友。本文主要阐述了Java中apper的应用方式及其内部原理, 详细说明了apper是如何通过实现相关接口, 从而让开发人员能够更加便捷地修改发送给目标的请求内容, 请诸位有需要的朋友参考阅读。介绍应用场景在某些具体场景里面, 是需要去修改来自客户端那边发送过来的请求参数的, 比如存在以下这些情况。示例就以上面所说的解密 为例web.xml 配置添加一个用来进行解析的工作。!-- 解析加密的 deviceId 得到 imei 和 sn --deviceIdParseFiltercom.xxxxxx.DeviceIdParseFilterencodingUTF-8forceEncodingtruedeviceIdParseFilter*.do代码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() {}}当请求里面带有相关参数的情况下, 就会按照以下方式进行操作。apper 代码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, 实行了一个特别的处理方式, 所以最后返回给你的结果, 不是客户端刚才提交上来的那些参数数据, 而是我们在内部程序里面,通过解析相关数据之后, 重新获取到的imei和sn。需要注意的是运行结果用于测试的这个测试类, 会直接把接收到的参数返回回去。ControllerRequestMapping(/api/)public class TestController {ResponseBodyRequestMapping(test.do)public Result test(String deviceId, String imei, String sn) {Map map new HashMap();map.put(deviceId, deviceId);map.put(imei, imei);map.put(sn, sn);return new Result(map);}}请求的参数里面是不包含有这个东西的, 具体的那个情况是看下面这个请求的超文本传输协议地址的样子。http://xxxxx.in.xxxxx.com/api/test.do?reqno123456imeiimeisn1001modelmx6osflyme6ver1.0.0localeen_US返回结果{code: 200,message: ,redirect: ,value: {sn: 1001,imei: imei,deviceId: null}}请求参数里包含着东西, 接着是请求的地址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}}可以看到到这里, 这篇关于Java中apper的使用以及其工作原理的详细说明文章就已经介绍完毕了。如果想要了解更多跟apper使用以及原理相关的内容, 可以搜索脚本之家以往发表的文章或者继续查看下面这些关联的文章。希望大家在以后能够多多支持和关注我谢谢。
返回列表