我有一个Vaadin
流应用程序,它是用Spring Boot
实现的。我使用OneLogin
对用户进行身份验证,如果当前会话已过期,应用程序尝试重新连接时,我目前遇到CORS
问题。用户看到的是来自Vaadin
的对话框,由于重新连接失败,对话框永远不会消失:
在浏览器控制台上,我看到CORS
错误。这是请求的顺序(每个重定向到下一个):
前两个请求在响应中具有CORS
头。这是CORS
错误:
我的应用程序中有一个过滤器,用于设置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
尝试自动重新连接时,此操作才会失败。知道我在这里缺少什么吗?