2011-07-11 2 views
4

Je souhaite utiliser la sécurité au niveau de la méthode sur mon application GWT. J'essaie d'utiliser Spring Security 3.1, comme j'ai trouvé un exemple de travail here, mais il n'utilise pas de formulaire-login. Après avoir lu this answer le premier appel de méthode obtient avec succès le SecurityContext, mais efface alors avant le prochain appel.Niveau de méthode source La sécurité échoue au deuxième appel

[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: '[email protected]e9f089: Authentication: [email protected]e9f089' 
... 
[org.springframework.security.access.intercept.aspectj.AspectJMethodSecurityInterceptor] - Authorization successful 
... 
[org.springframework.security.web.context.SecurityContextPersistenceFilter] - SecurityContextHolder now cleared, as request processing completed 
... 
[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession. 
[org.springframework.security.web.context.SecurityContextPersistenceFilter] - SecurityContextHolder now cleared, as request processing completed 
... 
[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - HttpSession returned null object for SPRING_SECURITY_CONTEXT 

Le deuxième appel arrive tout de suite après la première et juste après les journaux utilisateur dans

Est-il parce que j'ai suivi l'autre réponse et retiré <http pattern="/MyAppName/**" security="none" /> et ajouté <intercept-url pattern="/MyAppName/**" access="permitAll()" />?

Mes filtres sont les suivants:

<http pattern="/favicon.ico" security="none" /> 

<http access-decision-manager-ref="accessDecisionManager" use-expressions="true" auto-config="false" entry-point-ref="LoginUrlAuthenticationEntryPoint"> 
    <form-login login-page="/Login.html" always-use-default-target="true" default-target-url="/Main.html?gwt.codesvr=127.0.0.1:9997" /> 
    <intercept-url pattern="/Login.html" access="permitAll()" /> 
    <intercept-url pattern="/Login2.html" access="permitAll()" /> 
    <intercept-url pattern="/MyAppName/**" access="permitAll()" /> 
    <intercept-url pattern="/**" access="isAuthenticated()" /> 
    <logout delete-cookies="JSESSIONID" logout-success-url="/Login.html" /> 
    <remember-me token-validity-seconds="86400" key="key" user-service-ref="userDetailsService" /> 
</http> 

Suivant l'exemple que j'ai obtenu j'utilise AspectJ pour la sécurité globale de la méthode, mais ne serait pas l'utiliser si je pouvais obtenir ce travail:

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" mode="aspectj" proxy-target-class="true" > 
    <expression-handler ref="expressionHandler"/> 
</global-method-security> 

Merci de prendre le temps de lire ceci

S'il vous plaît laissez-moi savoir si plus de détails sont nécessaires.

+2

Je pense que vous avez besoin de réduire la taille à quelque chose de gérable, peu de gens prendront la peine de lire et de parcourir tout ce texte pour essayer de comprendre quel pourrait être le problème. –

+0

Merci pour votre commentaire. J'ai essayé d'enlever les journaux de 2 des 3 appels réussis, car ils étaient probablement redondants. – WhiteKnight

Répondre

0

Ce problème a été résolu.

La dernière partie de la solution consistait à supprimer la requête pour rendre SecurityContextHolder global.

Si vous rencontrez le même problème peut trouver this poste utile.

+1

Comment avez-vous réellement résolu le problème? J'ai le même problème. Je suis passé par le lien mais cela n'a pas aidé. – Tiny

+0

@Tiny Tout en essayant de faire fonctionner l'authentification à deux facteurs, j'ai défini SecurityContextHolder comme étant global, ce qui m'a permis de résoudre le problème, mais il y a peut-être eu beaucoup de choses à l'origine du problème. Aussi, je n'ai pas entendu de retour de Luke sur pourquoi cela aurait causé le problème que j'ai vécu. – WhiteKnight

Questions connexes