该版本仍在开发中,尚未被视为稳定。最新稳定版请使用Spring Session 3.5.3spring-doc.cadn.net.cn

春季安全集成

Spring Session提供与春季安全集成。spring-doc.cadn.net.cn

春季安全记忆支持(Spring Security Remember-me Support)

Spring Session 提供了与 Spring Security 的 Remember-me 认证的集成。 支持:spring-doc.cadn.net.cn

  • 更改会话过期长度spring-doc.cadn.net.cn

  • 确保会话 Cookie 在Integer.MAX价值. Cookie 的到期时间设置为最大值,因为 Cookie 仅在会话创建时设置。 如果设置的值与会话过期相同,用户使用会话时会话会被续订,但cookie的过期时间不会更新(导致过期时间被修复)。spring-doc.cadn.net.cn

要在 Java 配置中配置 Spring Session 与 Spring Security 一起,您可以参考以下列表作为指南:spring-doc.cadn.net.cn

@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的配置大致如下:spring-doc.cadn.net.cn

<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-doc.cadn.net.cn

使用Spring Security的Java配置DSL时,你可以配置自定义会话注册表通过SessionManagementConfigurer,如下列表所示:spring-doc.cadn.net.cn

@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那 返回会期实例。spring-doc.cadn.net.cn

使用XML配置时,大致如下列表:spring-doc.cadn.net.cn

<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-doc.cadn.net.cn

局限性

Spring Session对春季安全功能的实现会话注册表接口不支持getAllPrincipals由于该信息无法通过 Spring Session 检索。Spring Security 从未调用过这种方法, 因此,这只影响访问会话注册表他们自己。spring-doc.cadn.net.cn