之前遇到的问题是:自定义ActionFilter中,context.getMethodArgs()为null,请参见之前的问题帖子:
https://nutz.cn/yvr/t/4k736uofqoh0iraggqkcp34ipq
按照之前wendal兽总说的重新定了了chain.js中ActionFiltersProcessor和AdaptorProcessor的顺序,并在MainModule上用注解声明后解决了:@ChainBy(args = { "${app.root}/WEB-INF/classes/ioc/chain.js" })
现在的问题是:我之前自定义了其它的ActionFilter,里面主要是使用自定义的MyHttpServletRequest(继承了HttpServletRequestWrapper)来操作请求中的参数,比如特殊字符编码、过滤等(相关代码见下文)。
但自从 ActionFiltersProcessor 放在 AdapterProcessor 之后起,MyHttpServletRequest的处理相当于无效了,简单跟了断点,发现Action方法参数都注入完了之后才走的 MyHttpServletRequest 里的方法。
请问,我该如何处理让MyHttpServletRequest 的处理继续生效并且ActionFilter的match中context.getMethodArgs()依旧可以获取到方法参数值呢?
public class WordFilter implements ActionFilter {
public View match(ActionContext context) {
HttpServletRequest req = context.getRequest();
//... 无关代码已省略
context.setRequest(new MyHttpServletRequest(req));
//... 无关代码已省略
return null;
}
}
var chain = {
"default" : {
"ps" : [
"org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
"org.nutz.mvc.impl.processor.EncodingProcessor",
"org.nutz.mvc.impl.processor.ModuleProcessor",
"!org.nutz.integration.shiro.NutShiroProcessor",
"org.nutz.mvc.impl.processor.AdaptorProcessor",
"org.nutz.mvc.impl.processor.ActionFiltersProcessor",
"!org.nutz.plugins.validation.ValidationProcessor",
"org.nutz.mvc.impl.processor.MethodInvokeProcessor",
"org.nutz.mvc.impl.processor.ViewProcessor"
],
"error" : 'org.rings.framework.files.logs.processor.MyFailProcessor'
}
}