| 
         对于最新的稳定版本,请使用 Spring Session 3.4.0!  | 
    
Spring Security 集成
Spring Session 提供与 Spring Security 的集成。
Spring Security Remember-me 支持
Spring Session 提供与 Spring Security 的 Remember-me Authentication 的集成。 支持:
- 
更改会话过期长度
 - 
确保会话 Cookie 的过期时间
Integer.MAX_VALUE. Cookie 过期时间设置为尽可能大的值,因为仅在创建会话时设置 Cookie。 如果将其设置为与会话过期时间相同的值,则会话将在用户使用时续订,但 Cookie 过期时间不会更新(导致过期时间被修复)。 
要在 Java 配置中使用 Spring Security 配置 Spring Session,可以使用下面的清单作为指南:
@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 Security 并发会话控制
Spring Session 提供与 Spring Security 的集成以支持其并发会话控制。
这允许限制单个用户可以同时拥有的活动会话数,但与默认值不同的是
Spring Security 支持,这也适用于集群环境。这是通过提供自定义
Spring Security 的SessionRegistry接口。
使用 Spring Security 的 Java 配置 DSL 时,您可以配置自定义的SessionRegistry通过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那
返回Session实例。
使用 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>
这假设您的 Spring SessionSessionRegistrybean 称为sessionRegistry,这是所有SpringHttpSessionConfiguration子。
局限性
Spring Session 对 Spring Security 的SessionRegistryinterface 不支持getAllPrincipals方法,因为无法使用 Spring Session 检索此信息。Spring Security 永远不会调用此方法,
因此,这仅影响访问SessionRegistry他们自己。