我想为我的spring应用程序添加自定义标头到Oauth2令牌响应。具体来说,它涉及CORS标题,即Access-Control-Allow-Origin ...我已设法将它们添加到401响应中,但没有运气200个。
我到处寻找并调试项目没有结果。我试过通过拦截器添加这些头,但响应仍然不包含它们。 有什么想法吗?
我使用带有注释配置的Spring安全性。
我在这里问过类似的问题:Allow OPTIONS HTTP Method for oauth/token request你可以检查我的弹簧配置。
答案 0 :(得分:3)
使用此Cors过滤器(或者如果您将我的版本的最后几行添加到您的版本中,它可能会有效)并且您没有在其他链接帖子中提到的问题!
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter implements Filter {
public SimpleCorsFilter() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
答案 1 :(得分:0)
事实证明我在拦截器中使用了错误的方法
对于任何感兴趣的人,我的工作代码如下:
return new AuthorizationServerConfigurer() {
...
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
...
endpoints.addInterceptor(new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest hsr, HttpServletResponse rs, Object o) throws Exception {
rs.setHeader("Access-Control-Allow-Origin", "*");
rs.setHeader("Access-Control-Allow-Methods", "GET");
rs.setHeader("Access-Control-Max-Age", "3600");
rs.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
return true;
}
});
}
}
}