L'utilisateur Accordée Autorités sont toujours : ROLE_ANONYMOUS?
Je suis en utilisant la méthode suivante pour faire un programmatique de connexion après l'enregistrement
private void autoLogin(User user,
HttpServletRequest request)
{
GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] { new GrantedAuthorityImpl(
"ROLE_ADMIN") };
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
user.getUsername(), user.getPassword(),grantedAuthorities);
//generate session if one doesn't exist
request.getSession();
token.setDetails(new WebAuthenticationDetails(request));
Authentication authenticatedUser = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
}
l'utilisateur est authentifié, mais toujours a la ROLE_ANONYMOUS je ne sais pas pourquoi ?
des idées ?
je pense que c'est parce que la page nécessite une ROLE_ADMIN principal et le rôle de l'utilisateur après authentification anonyme, quelqu'un sait comment faire de l'utilisateur principal d'un administrateur lors de l'enregistrement ?
OriginalL'auteur Mahmoud Saleh | 2010-10-13
Vous devez vous connecter pour publier un commentaire.
Ce comportement très étrange. Javi suggère de persister contexte de sécurité dans la session manuellement, mais il devrait être fait automatiquement par le Printemps de Sécurité de l'
SecurityContextPersistenceFilter
.Une cause possible je peux imaginer est
filters = "none"
dans<intercept-url>
de votre inscription et la page de traitement.filters = "none"
désactive tous les filtres de sécurité pour l'URL spécifiée. Comme vous pouvez le voir, il peut interférer avec d'autres fonctions de Sécurité Printemps. Donc, la meilleure approche est de garder les filtres activés, mais de le configurer pour autoriser l'accès pour tous les utilisateurs. Vous avez plusieurs options:access
attribut (c'est à dire sans<http use-expressions = "true" ...>
):access = "ROLE_ANONYMOUS"
permet l'accès pour les utilisateurs non authentifiés, mais refuse pour l'authentifiés ceuxaccess = "IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED"
<http use-expressions = "true" ...>
) il suffit d'écrireaccess = "true"
pour permettre l'accès pour tous les utilisateurs (mais d'autres<intercept-url>
s doivent utiliser cette syntaxe trop).Édité.
donc, si j'utilise access="true" seulement ce qui signifie n'importe qui peut accéder à la page, mais les filtres sont-ils exécutés ? et que penser de l'utilisation à la fois d'accès="true" et filtres="none" est-ce possible ?
Si vous écrivez
filters="none"
, les filtres ne sont pas exécutées. Sinon, ils sont exécutés.Vous dites
but other <intercept-url>s should use this syntax too
cependant je utiliser access="true" et filtres="none" à la fois ensemble et fonctionne bien. Ce que tu veux dire avec ça? Signifie-t-il, je ne peux pas utiliser les filtres="none" et accédez="true" à différents intercepteurs si j'ai mis <http utilisez-les expressions = "true" ...> ?OriginalL'auteur axtavt
J'ai eu un problème similaire et j'ai dû mettre manuellement à la séance de cet après l'authentification.
Essayer.
Comme axtavt affirme qu'il définit le gestionnaire de sécurité dans la session. Je suis d'accord qu'il devrait être fait automatiquement, mais quand j'ai essayé j'ai eu le configurer pour qu'il fonctionne.
OriginalL'auteur Javi