Java 如何在HandlerInterceptorAdapter中添加HttpServletRequest头?
在切换环境时,我试图向请求中添加一个授权标头作为临时解决方法。我试图在一个扩展HandlerInterceptorAdapter的拦截器中处理它 我使用了MutableHttpServletRequest类,以便能够将头添加到请求中,但似乎没有任何方法可以实际修改拦截器中返回的请求。有什么想法吗Java 如何在HandlerInterceptorAdapter中添加HttpServletRequest头?,java,spring,http-headers,interceptor,Java,Spring,Http Headers,Interceptor,在切换环境时,我试图向请求中添加一个授权标头作为临时解决方法。我试图在一个扩展HandlerInterceptorAdapter的拦截器中处理它 我使用了MutableHttpServletRequest类,以便能够将头添加到请求中,但似乎没有任何方法可以实际修改拦截器中返回的请求。有什么想法吗 编辑:还是必须在筛选器中执行此操作?HttpServletRequest类型对象是只读的,要执行此操作,您应该: public class YourInterceptor extends Handler
编辑:还是必须在筛选器中执行此操作?HttpServletRequest类型对象是只读的,要执行此操作,您应该:
public class YourInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
SomeModel model = new SomeModel();
request.setAttribute("someValue", model );
request.addHeader("xxx","asecret");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
//...
response.addHeader("dummy-header, "dummy-value");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
SomeModel model = (Long) request.getAttribute("someValue");
}
}
->创建一个扩展HttpServletRequestWrapper的类(添加一些行为、装饰器模式)
->在您的配置类中添加
.and().addFilterAfter(new CustomGatewayFilter(), ConcurrentSessionFilter.class)
您应该能够在中的preHandle()处修改请求HandlerInterceptorAdapter@kuhajeyan我看不出有什么方法可以在拦截器中修改请求,因为它实际上并不返回请求对象。也许我遗漏了什么?
HttpServletRequest
没有名为addHeader
的方法。此外,更新postHandle
中的响应将不会起任何作用,因为它在该点已提交。
public class CustomGatewayFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
MutableHttpServletRequest mutableRequest = new MutableHttpServletRequest(req);
mutableRequest.putHeader("referer", "custom value");
chain.doFilter(mutableRequest, response);
}
}
.and().addFilterAfter(new CustomGatewayFilter(), ConcurrentSessionFilter.class)