Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring Security. Unexpired sessions


Автор: Vladus 16.4.2010, 17:38
Всем доброго времени суток.

Ситуация такая: используется спринг секьюрити. При при удалении пользователя администратором из приложения я делаю вот так:
Код

    public void expireSessions(String username) { // expires all sessions of logged on user with a given user name
        SessionInformation[] usersessions = sessions.getAllSessions(username, false);
        if (usersessions != null) {
            for (SessionInformation session : usersessions) {
                session.expireNow();
            }
        }
    }

При логауте пользователя делаю так:
Код

        SecurityContextLogoutHandler logoutHandler = new SecurityContextLogoutHandler();
        SecurityContext sc = (SecurityContext) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");

        facadeService.expireSession(request.getSession().getId());
        logoutHandler.logout(request, response, sc.getAuthentication());

        return "redirect:index.html";


Все работает отлично, пользователя при попытке пройтись по какому то урлу выкидывает на логин форму.

Но если сделать вот так: зайти пользователем и сначала выключить томкат, а потом сразу включить, то пользователь сможет спокойно продолжить работать, при том, что я при выключении удаляю все сессии SessionRegistry, а при старте проверяю - там сессий никаких нет  smile 

вот контекст секьюрити
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                                 http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">

    <beans:bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
        <beans:property name="allowIfAllAbstainDecisions" value="false"/>
        <beans:property name="decisionVoters">
            <beans:list>
                <beans:bean class="org.springframework.security.vote.RoleVoter"/>
                <beans:bean class="org.springframework.security.vote.AuthenticatedVoter"/>
            </beans:list>
        </beans:property>
    </beans:bean>

    <global-method-security secured-annotations="enabled" access-decision-manager-ref="accessDecisionManager"/>

    <http access-decision-manager-ref="accessDecisionManager" access-denied-page="/accessDenied.htm">
        <intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
         фильтры для урлов

        <form-login login-page="/login.htm" authentication-failure-url="/login.htm?login_error=1" default-target-url='/guidepost.htm' always-use-default-target='false'/>

        <concurrent-session-control max-sessions="100" expired-url="/login.htm?login_error=2" session-registry-alias="sessions"/>

        <anonymous />
    </http>

    <authentication-provider user-service-ref='userDetailsService'>
        <password-encoder hash="md5"/>
    </authentication-provider>

    <beans:bean name="userDetailsService" class="com.mypackage.UserDetailsServiceImpl"/>

</beans:beans>


В общем, заранее благодарен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)