Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在HandlerInterceptorAdapter中添加HttpServletRequest头?_Java_Spring_Http Headers_Interceptor - Fatal编程技术网

Java 如何在HandlerInterceptorAdapter中添加HttpServletRequest头?

Java 如何在HandlerInterceptorAdapter中添加HttpServletRequest头?,java,spring,http-headers,interceptor,Java,Spring,Http Headers,Interceptor,在切换环境时,我试图向请求中添加一个授权标头作为临时解决方法。我试图在一个扩展HandlerInterceptorAdapter的拦截器中处理它 我使用了MutableHttpServletRequest类,以便能够将头添加到请求中,但似乎没有任何方法可以实际修改拦截器中返回的请求。有什么想法吗 编辑:还是必须在筛选器中执行此操作?HttpServletRequest类型对象是只读的,要执行此操作,您应该: public class YourInterceptor extends Handler

在切换环境时,我试图向请求中添加一个授权标头作为临时解决方法。我试图在一个扩展HandlerInterceptorAdapter的拦截器中处理它

我使用了MutableHttpServletRequest类,以便能够将头添加到请求中,但似乎没有任何方法可以实际修改拦截器中返回的请求。有什么想法吗


编辑:还是必须在筛选器中执行此操作?

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)