Spring Security 整合
Spring Session 提供了與 Spring Security 的整合。
Spring Security Remember-me 支援
Spring Session 提供了與 Spring Security 的 Remember-me 認證的整合。支援
-
更改會話過期時長
-
確保會話 cookie 在
Integer.MAX_VALUE
過期。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 Security 併發會話控制
Spring Session 提供與 Spring Security 的整合以支援其併發會話控制。這允許限制單個使用者可以同時擁有的活動會話數量,但是,與預設的 Spring Security 支援不同,這也適用於叢集環境。這透過提供 Spring Security 的 SessionRegistry
介面的自定義實現來完成。
當使用 Spring Security 的 Java config DSL 時,您可以透過 SessionManagementConfigurer
配置自定義 SessionRegistry
,如下面的列表所示
@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 以提供返回 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>
這假設您的 Spring Session SessionRegistry
bean 被稱為 sessionRegistry
,這是所有 SpringHttpSessionConfiguration
子類使用的名稱。