|
该版本仍在开发中,尚未被视为稳定。最新稳定版请使用Spring Session 3.5.3! |
春季安全集成
Spring Session提供与春季安全集成。
春季安全记忆支持(Spring Security Remember-me Support)
Spring Session 提供了与 Spring Security 的 Remember-me 认证的集成。 支持:
-
更改会话过期长度
-
确保会话 Cookie 在
Integer.MAX价值. Cookie 的到期时间设置为最大值,因为 Cookie 仅在会话创建时设置。 如果设置的值与会话过期相同,用户使用会话时会话会被续订,但cookie的过期时间不会更新(导致过期时间被修复)。
要在 Java 配置中配置 Spring Session 与 Spring Security 一起,您可以参考以下列表作为指南:
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
// ... additional configuration ...
.rememberMe((rememberMe) -> rememberMe
.rememberMeServices(rememberMeServices())
);
}
@Bean
public SpringSessionRememberMeServices rememberMeServices() {
SpringSessionRememberMeServices rememberMeServices =
new SpringSessionRememberMeServices();
// optionally customize
rememberMeServices.setAlwaysRemember(true);
return rememberMeServices;
}
基于XML的配置大致如下:
<security:http>
<!-- ... -->
<security:form-login />
<security:remember-me services-ref="rememberMeServices"/>
<security:intercept-url pattern="/**" access="permitAll()"/>
</security:http>
<bean id="rememberMeServices"
class="org.springframework.session.security.web.authentication.SpringSessionRememberMeServices"
p:alwaysRemember="true"/>
春季安全并发会话控制
Spring Session 与 Spring Security 集成,以支持其并发会话控制。
这允许限制单个用户同时拥有的活跃会话数,但与默认不同
Spring Security 支持,这也适用于集群环境。这通过提供自定义来实现
Spring Security 的实现会话注册表接口。
使用Spring Security的Java配置DSL时,你可以配置自定义会话注册表通过SessionManagementConfigurer,如下列表所示:
@Configuration
public class SecurityConfiguration<S extends Session> {
@Autowired
private FindByIndexNameSessionRepository<S> sessionRepository;
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
// other config goes here...
.sessionManagement((sessionManagement) -> sessionManagement
.maximumSessions(2)
.sessionRegistry(sessionRegistry())
)
.build();
}
@Bean
public SpringSessionBackedSessionRegistry<S> sessionRegistry() {
return new SpringSessionBackedSessionRegistry<>(this.sessionRepository);
}
}
这假设你也配置了 Spring Session 以提供FindByIndexNameSessionRepository那
返回会期实例。
使用XML配置时,大致如下列表:
<security:http>
<!-- other config goes here... -->
<security:session-management>
<security:concurrency-control max-sessions="2" session-registry-ref="sessionRegistry"/>
</security:session-management>
</security:http>
<bean id="sessionRegistry"
class="org.springframework.session.security.SpringSessionBackedSessionRegistry">
<constructor-arg ref="sessionRepository"/>
</bean>
这假设你的春季课程会话注册表豆子叫会谈注册表,这是所有名称的通用名称SpringHttpSessionConfiguration子。
局限性
Spring Session对春季安全功能的实现会话注册表接口不支持getAllPrincipals由于该信息无法通过 Spring Session 检索。Spring Security 从未调用过这种方法,
因此,这只影响访问会话注册表他们自己。