当跨源资源从 Spring Boot 通过 Angular 加载时,JSESSIONID 被丢弃在浏览器中

问题描述

我使用 Spring Security Oauth2 身份验证作为客户端和资源服务器。 当我加载静态页面时,Oauth2 身份验证成功执行,并且从同一个浏览器会话中我可以访问 REST 点 (http://localhost:8080/)

但是,当我尝试通过 angular 加载相同的资源时,该资源是通过 Spring Boot 初始静态页面中的链接加载的,然后我可以看到 JSESSIONID Cookie 被删除,并且请求在服务器上被 401 拒绝。

我已启用

访问控制允许凭据:true

访问控制允许来源:http://localhost:4200

通过遵循 Spring Security DSL

protected void configure(HttpSecurity http) throws Exception {
        http
            .cors().configurationSource(request -> {
                var cors = new CorsConfiguration();
                cors.setAllowedOrigins(List.of("http://localhost:4200","http://localhost:8080"));
                cors.setAllowedMethods(List.of("GET","POST","PUT","DELETE","OPTIONS"));
                cors.setAllowedHeaders(List.of("Origin","Access-Control-Allow-Origin"));
                cors.setAllowCredentials(true);
                return cors;
            })

我怀疑浏览器出于安全原因丢弃了 JSESSIONID,但控制台上没有错误消息。我还禁用了 HttpOnly ,但它没有帮助,但我不认为它应该有帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)