因业务需要,使用JFinal搭建的接口服务,接入端参数需要进行加密传输。
原系统处理顺序为: Interceptor ->Validator -> Controller,且入参采用注入方式。
加入一个前置拦截器用于加密参数预处理变更为:
参数解析拦截器 -> Interceptor ->Validator -> Controller,
-----------------------------------------------------------------------------
参数解析拦截器主要处理的内容为:
1.参数解密
2.request内的参数修改 (通过继承HttpServletRequestWrapper)来保持参数到Controller的中继。
-------------------------------------------------------------------------------
现问题如下:
修改后的request对参数注入没有任何影响。所有的参数注入形式取值均无法取到,只能通过get系列方法来得到,所有Controller内的方法都需要对参数进行改造,不知有什么快捷的方式没。
-------------------------------------------------------------------------------
示例:
Interceptor:
// 参数值解密封装 Map<String,Object> paraMap = decryptData(c.get("data")); // 入参修改中继 c.setHttpServletRequest(new EpRequestWrapper(c.getRequest(), paraMap )); System.out.println(c.getRequest().getParameter("p1")); //可以取到值 System.out.println(c.get("p1")); //可以取到值
Validator :
本身取值使用的get方法取值,参数值可以正常获取
Controller:
public void index(String p1,String p2){ System.out.println(p1); // 无法取到值 System.out.println(get("p1")); // 可以获取到值 }
参考 jfinal 的 JsonRequest:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/core/paragetter/JsonRequest.java
这里头接管了 getParameterMap()、getParameter(...)、getParameterValues()、getParameterNames()
JsonRequest.java 中从 getInputStream() 开始往下的一些方法仅为转调,不必关心