春季启动版本:2.3.0 version
使用spring引导应用程序作为src
of iframe
,在类路径中使用spring安全性,webflux和servlet应用程序的行为不同。
反应性webapp的安全配置:
@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的安全配置:
@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。
<iframe src="http://localhost:8080/">
</iframe>
示例应用程序- spring-iframe.zip
用例:许多客户关系管理服务集成要求应用程序在其iframe中打开,在这种情况下,此应用程序用于Salesforce集成。
问题:是否有任何方法可以使用spring作为依赖项登录外部iframe?
发布于 2020-07-15 12:33:27
可以自定义CookieWebSessionIdResolver
bean以使用会话cookie的不同选项。sameSite(attribute)
可用于将SameSite值设置为“无”、“宽松”或“严格”。
@Bean
public WebSessionIdResolver webSessionIdResolver() {
CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
resolver.setCookieName("SESSION");
resolver.addCookieInitializer((builder) -> {
builder.path("/")
.httpOnly(true)
.secure(true)
.sameSite("None");
});
return resolver;
}
会话配置:
@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会话-核心依赖关系:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
https://stackoverflow.com/questions/62910918
复制相似问题