最新の安定バージョンについては、Spring Session 3.4.3 を使用してください! |
Spring Security 統合
Spring Session は Spring Security との統合を提供します。
Spring Security リメンバーミーサポート
Spring Session は Spring Security の Remember-me 認証との統合を提供します。サポート:
セッションの有効期限の長さを変更します
セッション 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 との統合を提供して、同時セッション制御をサポートします。これにより、1 人のユーザーが同時に持つことができるアクティブなセッションの数を制限できますが、デフォルトの Spring Security サポートとは異なり、これはクラスター環境でも機能します。これは、Spring Security の SessionRegistry
インターフェースのカスタム実装を提供することによって行われます。
Spring Security の Javaconfig 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);
}
}
これは、Session
インスタンスを返す FindByIndexNameSessionRepository
を提供するように Spring 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 Session SessionRegistry
Bean が sessionRegistry
と呼ばれることを前提としています。これは、すべての SpringHttpSessionConfiguration
サブクラスで使用される名前です。