Spring Boot Vaadin应用程序中IAM服务器的CORS问题

时间:2019-02-19 13:32:30

标签: spring-boot cors vaadin vaadin-flow

我有一个Vaadin流应用程序,它是用Spring Boot实现的。我使用OneLogin对用户进行身份验证,如果当前会话已过期,应用程序尝试重新连接时,我目前遇到CORS问题。用户看到的是来自Vaadin的对话框,由于重新连接失败,对话框永远不会消失:

enter image description here

在浏览器控制台上,我看到CORS错误。这是请求的顺序(每个重定向到下一个):

前两个请求在响应中具有CORS头。这是CORS错误:

enter image description here

我的应用程序中有一个过滤器,用于设置CORS标头。我什至试图允许所有来源进行测试:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CORSFilter extends OncePerRequestFilter {

    private static final String ALLOWED_METHODS = Stream.of(GET, POST, PUT, OPTIONS, DELETE).map(HttpMethod::name).collect(Collectors.joining(", "));
    private static final String ALLOWED_HEADERS = String.join(", ", Arrays.asList("Origin", "X-Requested-With", "Content-Type", "Accept"));

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, ALLOWED_METHODS);
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, ALLOWED_HEADERS);
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");

        if (!OPTIONS.name().equalsIgnoreCase(request.getMethod())) {
            filterChain.doFilter(request, response);
        }
    }
}

我还尝试了here所示的CORS过滤器,但这对我也不起作用。

请注意,当我打开http://localhost:8080时,身份验证有效。仅当会话期满后Vaadin尝试自动重新连接时,此操作才会失败。知道我在这里缺少什么吗?

0 个答案:

没有答案