0

现在在 Spring security 我有这个代码:

<session-management>
    <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>

如果有人尝试启动并发会话,则会引发异常。我的应用程序处理异常的方式是捕获它们,然后抛出将显示给用户的自定义异常。我的问题分为两部分。

首先,也是最重要的,我如何创建一个可以提供给会话管理的自定义类,以便它可以捕获旧异常并抛出新异常?在我看来,我需要继承并发控制,并在我的安全上下文中制作某种 bean,但我不知道该怎么做。

其次,将抛出的异常的名称是什么(我需要捕获的异常)?我的猜测是这将是一个 AccessDeniedException,但我不确定。这不像第一个问题那么重要,因为一旦我知道了我必须继承的正确类,我就会知道它可能是什么异常。

谢谢您的帮助,

镜像命运

4

1 回答 1

1

啊……我找到了答案。

我对方法进行了子类ConcurrentSessionControlStrategy化,并覆盖了该方法allowableSessionsExceeded。这个方法会抛出一个SessionAuthenticationException,我在再次抛出之前更改了谁的消息。我不得不添加这段代码:

<security:session-management session-authentication-strategy-ref="ccc"/>

<beans:bean id="ccc"
    class="com.lim.lds.client.sqlloader.security.CustomConcurrencyControl">
    <beans:constructor-arg name="sessionRegistry"
        ref="sessionRegistry" />
    <beans:property name="maximumSessions" value="1" />
</beans:bean>

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

到我的spring-security.xml档案。

我希望这可以帮助任何处于类似情况的人!

于 2011-06-08T16:25:05.627 回答