【问题标题】:Add headers to oauth/token response (spring-security)将标头添加到 oauth/token 响应(spring-security)
【发布时间】:2014-09-29 00:31:00
【问题描述】:

我想为我的 Spring 应用程序添加自定义标头到 Oauth2 令牌响应。具体来说,它涉及 CORS 标头,即 Access-Control-Allow-Origin ...我已设法将它们添加到 401 响应中,但没有 200 个响应。

我到处查看并调试了该项目,但没有任何结果。我尝试通过拦截器添加这些标头,但响应仍然不包含它们。 有什么想法吗?

我正在使用带有注释配置的 Spring 安全性。

我在这里问过类似的问题:Allow OPTIONS HTTP Method for oauth/token request 你可以在哪里查看我的 spring 配置。

【问题讨论】:

    标签: spring oauth spring-security oauth-2.0 cors


    【解决方案1】:

    使用这个 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() {
    }
    
    }
    

    【讨论】:

    • 我最终为我的服务器和 html 使用了 apache 代理,所以我不必再处理这些问题了。 IMO 这是最好的选择,因为 CORS 的问题正在堆积。同样在安全方面,最好只处理一个端口。
    【解决方案2】:

    原来我在拦截器中使用了错误的方法

    对于任何有兴趣的人,我的工作代码如下:

    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;
                    }
                });
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-07
      • 2018-04-26
      • 2020-02-08
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      相关资源
      最近更新 更多