首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在外部iframe中加载Spring应用程序

在外部iframe中加载Spring应用程序
EN

Stack Overflow用户
提问于 2020-07-15 08:42:18
回答 1查看 836关注 0票数 1

春季启动版本:2.3.0 version

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

反应性webapp的安全配置:

代码语言:javascript
运行
复制
@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {

    @Bean
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
        return http
                .headers().frameOptions().disable()
                .and()
                .authorizeExchange()
                .anyExchange().authenticated()
                .and()
                .formLogin()
                .and()
                .build();
    }
}

servlet webapp的安全配置:

代码语言:javascript
运行
复制
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.headers().frameOptions().disable()
                .and()
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin();
    }
}

使用上面给出的tomcat服务器和安全配置,用户将登录并成功地将响应发送回200 OK。在带有netty服务器的webflux中,Simliar配置以403禁止的方式进行响应,响应为

CSRF令牌已与此客户端相关联。

可能与SameSite=Lax;中的Set-cookie有关.

在任何外部域中使用iframe,并将src设置为spring引导应用程序。如果无法重新生成问题,请尝试删除cookie。

代码语言:javascript
运行
复制
<iframe src="http://localhost:8080/">
</iframe>

示例应用程序- spring-iframe.zip

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

问题:是否有任何方法可以使用spring作为依赖项登录外部iframe?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 12:33:27

可以自定义CookieWebSessionIdResolver bean以使用会话cookie的不同选项。sameSite(attribute)可用于将SameSite值设置为“无”、“宽松”或“严格”。

代码语言:javascript
运行
复制
@Bean
public WebSessionIdResolver webSessionIdResolver() {
    CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
    resolver.setCookieName("SESSION");
    resolver.addCookieInitializer((builder) -> {
        builder.path("/")
                .httpOnly(true)
                .secure(true)
                .sameSite("None");
    });
    return resolver;
}

会话配置:

代码语言:javascript
运行
复制
@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;
    }
}

Spring会话-核心依赖关系:

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-core</artifactId>
    <version>2.3.0.RELEASE</version>
</dependency>

春季会话-自定义Cookie的WebFlux

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62910918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档