今天遇到了一个需求,由于需要封装一个统一的接口,用正则做路劲匹配,那么需要登录和不需要的登录的action都写在了一起。
于是乎,就不能用简单的一个token注解来完成注入用户参数的事情。而是需要根据是否被登录拦截器拦截(也就是是否需要登录)来判断以及动态的添加登录的参数;
@RequestMapping(value = { "/**/{serverID:*.do)
public Object service(@PathVariable("serviceId") String serviceId, @RequestParam Map<String, Object> map, HttpServletRequest request) {
return map;
}
这里需要动态的往Map里添加参数
原来考虑过在拦截器中取出这个参数,但是拦截器中取出的参数无法修改。
@RequestParam 参数取值是根据HttpServletRequestWrapper中对应方法取值,那么我们的思路就可以定位到重写这个方法,然后用过滤器将请求定位到我们重写的HttpServletRequestWrapper中。
下面贴代码
/**
* @author zhangmj
* 2019年8月30日
* 上午10:31:35
*/
public class TokenRequestWrapper extends HttpServletRequestWrapper{
private Logger logger = LoggerFactory.getLogger(this.getClass());
private Map<String, String[]> params = new HashMap<Str