mty*_*urt 7 java spring servlets spring-mvc
我想要做的是,在处理请求后为响应添加新标头.我需要检查已处理的HttpStatus
代码(在我的情况下401未经授权)并添加新的标头.我知道Spring有拦截器,但无法按照文档中的说明修改响应:
请注意,HandlerInterceptor的postHandle方法并不总是非常适合与@ResponseBody和ResponseEntity方法一起使用.在这种情况下,HttpMessageConverter在调用postHandle之前写入并提交响应,这使得无法更改响应,例如添加标头.相反,应用程序可以实现ResponseBodyAdvice并将其声明为@ControllerAdvice bean或直接在RequestMappingHandlerAdapter上配置它.
好吧,我实施了ResponseBodyAdvice
.是的,它允许修改身体,但我无法修改标头,事件无法找到从控制器返回的状态代码.
使用servlet过滤器的另一个选择也不成功.我需要在filterChain.doFilter(servletRequest, servletResponse);
通话后添加标题.但它再次不会修改标头值.有没有办法完成这个简单的任务?
Ian*_*rts 10
听起来你正在使用servlet过滤器,你可能需要做的是将servlet响应对象包装一个检测到401状态代码设置的时间,并在那时添加自定义标头:
HttpServletResponse wrappedResponse = new HttpServletResponseWrapper(response) {
public void setStatus(int code) {
super.setStatus(code);
if(code == 401) handle401();
}
// three similar methods for the other setStatus and the two
// versions of sendError
private void handle401() {
this.addHeader(...);
}
};
filterChain.doFilter(request, wrappedResponse);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13246 次 |
最近记录: |