2011-07-18 3 views
7

Je souhaite configurer l'application Spring MVC en utilisant la sécurité Spring de la manière suivante.Spring Configuration de base de sécurité

  1. Une seule connexion simultanée est autorisée.
  2. Lorsque la session HTTP expire, l'utilisateur sera redirigé vers /security/sessionTimeout.html
  3. lorsque l'utilisateur se connecte en cas de succès, il sera redirigé vers le dossier "/".
  4. Lorsque les utilisateurs se déconnectent, il sera également redirigé vers "/".

je l'ai configurée de la manière suivante:

<security:http> 
<security:form-login login-page="/security/login.html" login-processing-url="/login" authentication-failure-url="/login.jsp?login_error=1" default-target-url="/"/> 
    <security:session-management invalid-session-url="/security/sessionTimeout.html"> 
     <security:concurrency-control max-sessions="1" /> 
    </security:session-management> 
    <security:logout logout-url="/logout" logout-success-url="/"/> 
    </security:http> 

et j'ai les questions suivantes:

  1. Je suis capable de se connecter avec le même compte sur 2 différents navigateurs (pas concurrency le contrôle fonctionne)
  2. Lorsque je clique sur la déconnexion, je suis redirigé vers "/security/sessionTimeout.html" au lieu de "/".

J'ai suivi le guide de référence de sécurité Spring. Qu'est-ce que je fais de mal?

Mise à jour: Voici à quoi ressemble mon fichier web.xml.

Mise à jour 2: il suffit d'exécuter log4j en mode débogage et ce que je suis en cliquant sur fermeture de session:

DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 1 of 11 in additional filter chain; firing Filter: 'ConcurrentSessionFilter' 
DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 2 of 11 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter' 
DEBUG [http-8080-2] (HttpSessionSecurityContextRepository.java:130) - No HttpSession currently exists 
    DEBUG [http-8080-2] (HttpSessionSecurityContextRepository.java:88) - No SecurityContext was available from the HttpSession: null. A new one will be created. 
    DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 3 of 11 in additional filter chain; firing Filter: 'LogoutFilter' 
    DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 4 of 11 in additional filter chain; firing Filter: 'UsernamePasswordAuthenticationFilter' 
    DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 5 of 11 in additional filter chain; firing Filter: 'BasicAuthenticationFilter' 
    DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 6 of 11 in additional filter chain; firing Filter: 'RequestCacheAwareFilter' 
    DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 7 of 11 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter' 
    DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 8 of 11 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter' 
    DEBUG [http-8080-2] (AnonymousAuthenticationFilter.java:67) - Populated SecurityContextHolder with anonymous token: 'org.sprin[email protected]9055c2bc: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]b364: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS' 
    DEBUG [http-8080-2] (FilterChainProxy.java:375) - /index.html at position 9 of 11 in additional filter chain; firing Filter: 'SessionManagementFilter' 
    DEBUG [http-8080-2] (SessionManagementFilter.java:87) - Requested session IDD8429BBAAA9561A97E1D2350ED63BC35 is invalid. 
    DEBUG [http-8080-2] (SessionManagementFilter.java:90) - Starting new session (if required) and redirecting to '/security/sessionTimeout.html' 

il se sent comme je filtre session de managment appliquée sur /index.html puis aucune session n'existe. Comment puis-je le résoudre?

+0

l'élément b) se produit probablement parce que vous n'avez autorisé l'accès à l'URL '/' par aucun utilisateur. – bluefoot

+0

quelle version de ressort utilisez-vous? – Simeon

+0

@Simeon, 3.0.5 et Spring 3.0.4 –

Répondre

2

De the Spring Security documentation:

Pour utiliser le support simultané de session, vous devrez ajouter ce qui suit à web.xml:

<listener> 
    <listener-class> 
    org.springframework.security.web.session.HttpSessionEventPublisher 
    </listener-class> 
</listener> 

Avez-vous ajouté cela?

+0

Il semble que je l'ai, mais j'ai posté toute ma configuration web.xml dans la mise à jour. –

+0

Cela n'a pas résolu le problème pour moi. –

Questions connexes