1

の実装を行うとき

org.springframework.security.core.userdetails.UserDetailsS​​ervice

ステートメントを使用します

sessionRegistry.registerNewSession(user.getUsername(), user);

認証が成功した後、その中に

sessionRegistry.getAllPrincipals();

リストは空ではありません (ただし、アプリケーションからログアウトしてもセッションはリスト内に残ります)、それ以外の場合、このリストは空になります。sessionRegistry 内で自動的にセッション登録 (およびユーザーのログアウト時またはセッションの有効期限切れ時の登録解除) を行うにはどうすればよいですか? 私の春の設定は以下の通りです:

<sec:http auto-config="true" use-expressions="true" access-denied-page="/accessDenied.jsf">
    <sec:form-login login-page="/login.jsf" />
    <sec:session-management session-authentication-strategy-ref="sas" />
</sec:http>

<bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />

<bean id="scr"
class="org.springframework.security.web.context.HttpSessionSecurityContextRepository" />

<bean id="smf"
class="org.springframework.security.web.session.SessionManagementFilter">
<constructor-arg name="securityContextRepository"
    ref="scr" />
<property name="sessionAuthenticationStrategy"
    ref="sas" />
</bean>

<bean id="sas"
class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
<constructor-arg name="sessionRegistry"
    ref="sessionRegistry" />
<property name="maximumSessions" value="10" />
</bean>
4

1 に答える 1

1

に を追加するのを忘れている可能性がありHttpSessionEventPublisherますweb.xml

もう 1 つの可能性は、問題のプリンシパルが、タイムアウトまたは無効化されていないアクティブなセッションをまだ持っていることです。最大セッション値は 10 です。テスト用に代わりに「1」に設定してみてください。

また、バージョン 3.0.5 は古くなっています。脆弱性を回避するために、最新バージョンを使用し、パッチを最新の状態に保つ必要があります。

于 2013-04-06T13:59:42.750 に答える