Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加载弹簧Webflux在外部iframe中的应用_Java_Spring_Spring Boot_Spring Security_Spring Webflux - Fatal编程技术网

Java 加载弹簧Webflux在外部iframe中的应用

Java 加载弹簧Webflux在外部iframe中的应用,java,spring,spring-boot,spring-security,spring-webflux,Java,Spring,Spring Boot,Spring Security,Spring Webflux,Spring启动版本:2.3.0.0版本 使用spring引导应用程序作为iframe的src,在类路径中使用spring安全性,webflux和servlet应用程序的行为不同 反应式webapp的安全配置: @配置 @启用WebFluxSecurity 公共类SecurityConfig{ @豆子 公共安全WebFilterChain安全WebFilterChain(ServerHttpSecurity http){ 返回http .headers().frameOptions().disa

Spring启动版本:2.3.0.0版本

使用spring引导应用程序作为
iframe
src
,在类路径中使用spring安全性,webflux和servlet应用程序的行为不同

反应式webapp的安全配置:

@配置
@启用WebFluxSecurity
公共类SecurityConfig{
@豆子
公共安全WebFilterChain安全WebFilterChain(ServerHttpSecurity http){
返回http
.headers().frameOptions().disable()
.及()
.授权交易所()
.anyExchange().authenticated()
.及()
.formLogin()
.及()
.build();
}
}
servlet webapp的安全配置:

@配置
@启用Web安全性
公共类SecurityConfig扩展了WebSecurity配置适配器{
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http.headers().frameOptions().disable()
.及()
.授权请求()
.anyRequest().authenticated()
.及()
.formLogin();
}
}
使用上面给出的tomcat服务器和安全配置,用户将登录,并成功返回200 OK的响应。 webflux中带netty服务器的Simliar配置响应为403禁止,响应为

CSRF令牌已关联到此客户端

可能与设置cookie的SameSite=Lax有关;在webflux中。

在任何外部域中使用
iframe
,并将
src
设置为spring boot app。如果无法重新生成问题,请尝试删除Cookie


示例应用程序-

用例:许多客户关系管理服务集成要求应用程序在其iframe中打开,在这种特殊情况下,此应用程序用于Salesforce集成

问题:
有没有办法使用spring webflux作为依赖项登录外部iframe?

CookieWebSessionIdResolver
bean可以定制为使用不同的会话cookie选项。
sameSite(属性)
可用于将sameSite值设置为“无”、“松弛”或“严格”

@Bean
公共WebSessionIdResolver WebSessionIdResolver(){
CookieWebSessionIdResolver解析器=新建CookieWebSessionIdResolver();
解析程序setCookieName(“会话”);
解析器.addCookie初始值设定项((生成器)->{
builder.path(“/”)
.httpOnly(真)
.安全(正确)
.sameSite(“无”);
});
返回解析器;
}
会话配置:

@Configuration
@EnableSpringWebSession
public class SessionConfig {

    @Bean
    public ReactiveSessionRepository<MapSession> sessionRepository() {
        return new ReactiveMapSessionRepository(new ConcurrentHashMap<>());
    }

    @Bean
    public WebSessionIdResolver webSessionIdResolver() {
        CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
        resolver.setCookieName("SESSION");
        resolver.addCookieInitializer((builder) -> {
            builder.path("/")
                    .httpOnly(true)
                    .secure(true)
                    .sameSite("None");
        });
        return resolver;
    }
}
@配置
@启用SpringWebSession
公共类会话配置{
@豆子
公共反应会话存储库会话存储库(){
返回新的ReactiveMapSessionRepository(新的ConcurrentHashMap());
}
@豆子
公共WebSessionIdResolver WebSessionIdResolver(){
CookieWebSessionIdResolver解析器=新建CookieWebSessionIdResolver();
解析程序setCookieName(“会话”);
解析器.addCookie初始值设定项((生成器)->{
builder.path(“/”)
.httpOnly(真)
.安全(正确)
.sameSite(“无”);
});
返回解析器;
}
}
Spring会话核心依赖项:


org.springframework.session

浏览器控制台中是否存在任何错误/警告?Chrome和Firefox可能会注意到他们正在阻止的任何东西及其原因。@OrangeDog是的,在登录页面中的webflux响应cookie默认设置了Samesite=Lax。Chrome在网络面板中显示此警告,并在抛出登录403后显示
此集合Cookie被阻止,因为它具有“Samesite=Lax”属性,但来自一个跨站点响应,而该响应不是对顶级导航的响应
这是您的答案。您可以在下面编写并接受它。@OrangeDog但这并不能解决登录问题,我需要一个解决方法来从Spring安全会话cookie中禁用Samesite属性。