【发布时间】:2020-11-26 20:05:41
【问题描述】:
详情: 我正在使用 spring boot oauth2 资源服务器,即使在尝试了不同的方法来过滤它之后,它也会给我 CORS。
我的代码看起来如何?
它是一个简单的资源服务器,带有 spring-cloud-starter-oauth2 和 spring-cloud-starter-security 作为两个主要依赖项的 Spring Boot。
我已使用 java 注释将其设为资源服务器:
@CrossOrigin(origins = "*", maxAge = 3600, allowedHeaders = "*")
@RestController
@RequestMapping("/api/v1")
@EnableResourceServer
这是我尝试解决此问题的方法:
我尝试添加一个自定义过滤器,该过滤器使用下面的代码跳过进一步的过滤器调用。在此之后,我得到“Authorization Header not allowed in preflight request on browser”。将CORS everyehere 扩展添加到我的浏览器后,我的请求成功了。
@EnableWebSecurity(debug = true)
@Order(Ordered.HIGHEST_PRECEDENCE)
public class WebSecurityConfig implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
response.setHeader("Access-Control-Expose-Headers", "Location");
System.out.println(request.getMethod());
System.out.println("-----------------");
if(!request.getMethod().equals("OPTIONS")) {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}
【问题讨论】:
标签: java spring-boot oauth-2.0 cors cloud-security