rest - Spring Rest API 拦截器在每个/每个请求上添加响应 header

标签 rest spring-mvc interceptor spring-4 response-headers

我正在使用基于 Spring 4 REST API 注释的配置应用程序。一旦用户通过 JWT 进行身份验证,我想在每个/每个请求上添加响应 header 。我已经为如下所示的内容创建了拦截器:

public class AuthenticateInterceptor implements HandlerInterceptor {

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception arg3)
        throws Exception {
    response.addHeader("afterCompletion", "afterCompletion header");
    response.setHeader("afterCompletion", "afterCompletion header");
    System.out.println("************** afterCompletion **************");
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object,
        ModelAndView modelAndView) throws Exception {
    response.addHeader("postHandle", "postHandle header");

    System.out.println("************** postHandle **************");
}

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
    System.out.println("************** preHandle **************");

    return true;
  }
}

我的拦截器配置如下:

@Configuration
public class AdapterConfig extends WebMvcConfigurerAdapter {

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new AuthenticateInterceptor());
  }

}

当我收到 JSON 响应时,我无法看到从拦截器添加的附加 header 值。任何人都可以帮助我解决问题,以及如何为每个/每个请求添加来自拦截器的 header 。

最佳答案

我在拦截器上没有成功,而是使用 Filters 或 WebFilter 完美地工作:

@Component
public class ResponseHeaderWebFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        httpServletResponse.setHeader("CustomHeaderName", "SomeValue");
        chain.doFilter(request, response);
    }
}

如果您使用的是 webflux react 组件,那么:

@Component
public class ResponseHeaderWebFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        exchange.getResponse()
          .getHeaders()
          .add("CustomHeaderName", "SomeValue");
        return chain.filter(exchange);
    }
}

关于rest - Spring Rest API 拦截器在每个/每个请求上添加响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43555867/

相关文章:

java - Jersey REST 与使用 JSON 相关的问题

java - 使用 spring mvc 和 hibernate Rest 服务从数据库保存和检索图像

angular - 在拦截器中刷新 token 时管道 catchError 不起作用

testing - 在grails的集成测试中测试beforeInterceptor

spring-mvc - Apache Shiro + Spring MVC

ioc-container - Ninject:每个被拦截的类实例有一个拦截器实例?

java - 如何为 feign bean 字段设置 JsonProperty 名称

http - 为需要 SSL/TLS 的请求发送的正确 HTTP 响应是什么

python - 是否可以使用 python requests 库发布音频文件

java - 设置 Cookie 在 Spring web-mvc 4 中不起作用