2010-10-07 2 views
4

Je n'arrive pas à trouver comment obtenir une référence au SessionRegistry de Spring Security (V3) dans une action struts.Comment obtenir le SpringSecurity SessionRegistry?

J'ai configuré l'auditeur à l'intérieur de mon fichier web.xml:

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

Et j'ai essayé d'utiliser l'annotation @Autowired pour le mettre en une action:

@Autowired 
private SessionRegistry sessionRegistry; 

@Override 
public String execute() throws Exception { 
    numberOfUsersLoggedin= sessionRegistry.getAllPrincipals().size(); 
    return SUCCESS; 

} 


public SessionRegistry getSessionRegistry() { 
    return sessionRegistry; 
} 

public void setSessionRegistry(SessionRegistry sessionRegistry) { 
    this.sessionRegistry = sessionRegistry; 
} 

La configuration http ressemble à ceci:

<session-management invalid-session-url="/public/login.do?login_error=expired" 
     session-authentication-error-url="/public/login.do" 
     session-fixation-protection="newSession"> 
     <concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/> 
    </session-management>  

Généralement, je suis plus à l'aise de câbler moi-même la fève, acheter pas sûr comment cela est exposé en utilisant l'espace de noms. Chaque fois que l'action s'exécute, le registre de session est nul. Est-ce que quelqu'un peut signaler ce que je fais mal ici, ou me montrer le chemin à un exemple?

Merci d'avance pour toutes les réponses!

Répondre

1

Vous ne savez pas si vous avez fait référence à la section Session Management dans la documentation de référence Spring Security. Il a un extrait combinant l'espace de noms et les haricots personnalisés.

+0

merci pour le lien. J'ai ajouté le bean sessionRegistry à ma configuration Spring, et ce n'est plus nul dans l'action Struts. Toutefois, lorsque j'essaie d'obtenir le # d'utilisateurs connectés (lors de la connexion), la valeur de sessionRegistry.getAllPrincipals(). Size(); est toujours 0. Suis-je en train de lire les docs? Il me semble que si j'utilise un formulaire de connexion personnalisé (que je m'authentifie avec LDAP), je ne peux pas utiliser la gestion de session namespace/auto config que j'ai spécifiée ci-dessus. Il semble que je dois manuellement configurer tous les gestion de session et contrôle de concurrence manuellement? – Griff

+0

En regardant les documents en ligne, je n'arrive pas à comprendre quel est le nom de mon fournisseur d'authentification pour myAuthFilter. J'utilise l'espace de nommage qui ne fournit pas un identifiant de bean ... \t Griff

3

Si vous configurez Spring Security par espace de noms, les attributs de balise contrôle concurrency suivants peuvent être utiles pour accéder SystemRegistry:

  1. session-registre-alias.
  2. session-registre-réf.

description de chacun des attributs de la documentation officielle:

session-registre-alias. Il peut également être utile d'avoir une référence au registre de session interne pour une utilisation dans vos propres fèves ou une interface d'administration. Vous pouvez exposer le bean interne à l'aide de l'attribut session-registry-alias, en lui donnant un nom que vous pouvez utiliser ailleurs dans votre configuration.

session-registre-réf. L'utilisateur peut fournir sa propre implémentation SessionRegistry à l'aide de l'attribut session-registry-ref. Les autres haricots de contrôle de session simultanés seront câblés pour l'utiliser.

Questions connexes