Problema com spring security (logout e sessions)

Boa noite!

Estou com uma dúvida a respeito de como o spring security trata o logout e as sessions da aplicação.

Tenho pesquisado sobre o assunto nos últimos 2 dias e, apesar das inúmeras soluções propostas, nenhuma resolveu o meu problema.

Minha lib conta com os seguintes jars: commons-logging/ mysql-conector / spring framework 3.1 / spring security 3.0.7

Tenho os seguintes artefatos na minha aplicação:

index.xhtml (arquivo simples que aponta para as áreas de usuário e de administrador)

[code]<?xml version="1.0" encoding="UTF-8"?>

Home Page

Página de Boas Vindas

Área de Usuários
Área de Administradores [/code]

login.xhtml (página de login chamada pelo spring security quando se tenta acessar uma página protegida)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Autenticação</title>
    </head>
    <body>

        <form action="j_spring_security_check" method="post">
            Usuário: <input type="text" name="j_username" /><br/>
            Senha: <input type="text" name="j_password"/><br/>
            <input type="submit" value="Efetuar Login"/>
        </form>
        <br /><br />
        <a href="index.xhtml">Retornar para a Página Inicial</a>
    </body>
</html>

falha.xhtml (arquivo chamado quando há falha na autenticação)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Falha na tentativa de login</title>
    </head>
    <body>
        <div>Login e/ou senha inválidos!</div>
        <br/>
        <a href="index.xhtml">Retornar para a Página Inicial</a>
    </body>
</html>

usuario/index.xhtml (página que exige ROLE_USER ou ROLE_ADMIN para ser acessada)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Área do Usuário</title>
    </head>
    <body>
        <h1>Bem Vindo a Área de Usuários</h1>
        <a href="../index.xhtml">Retornar para a Página Inicial</a>
        <br />
        <a href="../logout">Sair</a>
    </body>
</html>

administrador/index.xhtml (página que exige a ROLE_ADMIN para ser acessada)

[code]<?xml version="1.0" encoding="UTF-8"?>

Área do Administrador

Bem Vindo a Área de Administradores

Retornar para a Página Inicial
Sair [/code]

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

applicationContext.xml (arquivo de configuração do spring security)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
 
    <!-- data source -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/security" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>
 
    <sec:http auto-config="true">
        <sec:form-login login-page="/login.xhtml" authentication-failure-url="/falha.xhtml" />
        <sec:logout invalidate-session="true" logout-success-url="/index.xhtml" logout-url="/logout"/>
        <sec:intercept-url pattern="/usuario/**" access="ROLE_USER,ROLE_ADMIN" />
        <sec:intercept-url pattern="/administrador/**" access="ROLE_ADMIN" />
        <sec:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        
        
    </sec:http>
    <sec:authentication-manager>
        <sec:authentication-provider>
            <sec:jdbc-user-service data-source-ref="dataSource"
                                   users-by-username-query="SELECT username, password, 'true' as enable FROM users WHERE username=?"
                                   authorities-by-username-query="SELECT username, authority FROM users WHERE username=?" />
        </sec:authentication-provider>
    </sec:authentication-manager>
 
 
</beans>

*netbeans, glassfish 3.1

Alguns fluxos de execução apresentados pela configuração acima:

fluxo 1:
index.xhtml carregado
requisição para usuario/index.xhtml
página de login apresentada
login de usuário efetuado
área de usuario aberta
tentativa de logout (botão sair)
index.xhtml apresentado
requisição para usuario/index.xhtml
página de usuário aberta sem autenticação

fluxo 2:
index.xhtml carregado
requisição para administrador/index.xhtml
página de login apresentada
login de administrador efetuado
área de administrador aberta
tentativa de logout (botão sair)
index.xhtml apresentado
requisição para administrador/index.xhtml
página de administrador aberta sem autenticação

O filtro funciona corretamente. Todas as roles são respeitadas(de início). Não consigo, por exemplo, acessar a área de administrador com um usuário com role user.
O problema é que não consigo fazer com que o spring security mate a sessão. Não consigo fazer o logout nem com reza braba :cry: .

Alguém tem experiência nisso? Já passou por algo parecido?

Estou a procura de sugestões!

Caso esteja descumprindo alguma regra, desculpe.

Grato.

Olá, você já tentou colocar a tag:

no arquivo de configuração do Spring Security?