【问题标题】:Enabling CORS in spring security label在 spring 安全标签中启用 CORS
【发布时间】:2018-11-08 09:55:14
【问题描述】:

如何在 Spring Security 标签中启用 CORS,即在令牌 url 中。我正在使用 spring security 3.1 和 spring mvc 4.3.12。我已成功生成一个令牌以保护 API,但无法在令牌 url 中启用 CORS。 我已使用以下代码生成访问令牌

spring-security.xml

<http pattern="/oauth/token" create-session="stateless"  
          authentication-manager-ref="clientAuthenticationManager"  
          xmlns="http://www.springframework.org/schema/security">  
        <intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" />  
        <anonymous enabled="false" />  
        <http-basic entry-point-ref="clientAuthenticationEntryPoint" />  
        <!-- include this only if you need to authenticate clients via request   
        parameters -->  
        <custom-filter ref="clientCredentialsTokenEndpointFilter"  
                       after="BASIC_AUTH_FILTER" />  
        <access-denied-handler ref="oauthAccessDeniedHandler" />  
    </http>  

这就是我启用 CORS 但不起作用的方式

dispatcher-servlet.xml

<mvc:cors>
        <mvc:mapping path="/oauth/token" allowed-origins="http://localhost:4200"
                     allowed-methods="GET" allowed-headers="Access-Control-Allow-Origin" />
    </mvc:cors>

这是我得到的错误

login:1 加载失败 http://localhost:8080/M.S.-Handloom-Fabrics/oauth/token?grant_type=password&client_id=restapp&client_secret=restapp&username=nishan&password=nishan: 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:4200” 使用权。响应的 HTTP 状态代码为 400。

【问题讨论】:

    标签: java spring spring-mvc spring-security token


    【解决方案1】:

    对于此错误,您必须创建如下所示的新类。 private String corsFilter="*"; 当你提供 * 它将允许一切。希望对你有所帮助。

    @Component
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public class CorsFilter implements Filter {
    
        private String corsFilter="*";
    
        public CorsFilter() {
        }
    
        @Override
        public void doFilter(final ServletRequest req, final ServletResponse res,
                final FilterChain chain) throws IOException, ServletException {
    
            final HttpServletResponse response = (HttpServletResponse) res;
            final HttpServletRequest request = (HttpServletRequest) req;
            response.setHeader("Access-Control-Allow-Origin", corsFilter);
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Methods",
                    "POST,  GET, PUT, OPTIONS, PATCH ,DELETE");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", " Content-Type, Authorization");
    
            if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
                response.setStatus(HttpServletResponse.SC_OK);
            } else {
                chain.doFilter(req, res);
            }
        }
    
        @Override
        public void init(final FilterConfig filterConfig) {
        }
    
        @Override
        public void destroy() {
        }
    }
    

    【讨论】:

    • Filter 类需要导入哪个类
    • 导入 javax.servlet.Filter;。如果我的回答有帮助,请接受此回答
    • 我不能使用 XML @jai 做到这一点
    猜你喜欢
    • 2019-01-14
    • 2012-11-21
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2020-02-02
    • 2016-07-14
    相关资源
    最近更新 更多