@Exiger une autorisation préalable de l'annotation pas de travail de la sécurité printemps
J'ai trouvé beaucoup de questions similaires, mais aucun n'a résolu mon problème.
Mon problème est ROLE_USER
pouvez accéder à des fonctions de ROLE_ADMIN
Mon spring-security.xml le code est le suivant.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:s="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<s:http auto-config="true" use-expressions="true">
<s:intercept-url pattern="/index.jsp" access="permitAll" />
<s:intercept-url pattern="/welcome*" access="hasRole('ROLE_USER')" />
<s:intercept-url pattern="/helloadmin*" access="hasRole('ROLE_ADMIN')" />
<s:form-login login-page="/login" default-target-url="/welcome"
authentication-failure-url="/loginfailed" />
<s:logout logout-success-url="/logout" />
</s:http>
<s:authentication-manager>
<s:authentication-provider>
<s:user-service>
<s:user name="asif" password="123456" authorities="ROLE_USER,ROLE_ADMIN" />
<s:user name="raheel" password="123456" authorities="ROLE_USER" />
</s:user-service>
</s:authentication-provider>
</s:authentication-manager>
quand j'ajoute <s:global-method-security pre-post-annotations="enabled"/>
mon code montre ressources ne trouve pas d'erreur et quand j'ai enlever mon code à exécuter avec succès mais ROLE_USER
pouvez accéder à ROLE_ADMIN
fonctions
Mon contrôleur de fonction.
@PreAuthorize("hasRole('ROLE_ADMIN')")
@RequestMapping(value="/delete", method = RequestMethod.GET)
public String DeleteAll(ModelMap model, Principal principal ) {
org.springframework.security.core.userdetails.User activeUser = (org.springframework.security.core.userdetails.User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
System.out.println("Active user is "+activeUser.getUsername()+"Authorities are "+activeUser.getAuthorities());
return "deleteUsers";
}
Vous devez vous connecter pour publier un commentaire.
Vous devriez avoir
Si vous voulez le
@PreAuthorize
annotations au travail.Pour répondre au commentaire:
Il semble que vous êtes absent le
spring-aop
dépendance.Si vous utilisez maven vous avez besoin:
Si non, vous pouvez obtenir le pot de ici.
Si vous utilisez le format XML de Configuration n'oubliez pas d'ajouter l'attribut suivant:
<s:global-method-security pre-post-annotations="enabled"/>
Si vous utilisez Java Configuration n'oubliez pas d'ajouter l'annotation suivante:
@EnableGlobalMethodSecurity(prePostEnabled = true)
J'ai été confronté au même problème. Mon problème est résolu quand j'ai déménagé au-dessous de l'élément de applicationContext.xml à *-servlet.xml (mon répartiteur de configuration xml).
Vous d'inclure cet élément sur votre du répartiteur xml PAS sur votre application xml.
Printemps FAQ
J'ai eu le même problème à travailler avec des annotations, le problème est qu'il n'y a pas de @Contrôleur annotation dans mon contrôleur.
Il semble donc que vous avez besoin de :
Ces annotations dans votre Ressort de configuration de la Sécurité :
Thèses annotations dans votre contrôleur :
De Plus, si vous rencontrez toujours des problèmes, pensez à ajouter cette page à vos log4j2 configuration :
Vous le verrez dans les journaux, si vos annotations sont considérés par Printemps :
Et évidemment, vous pouvez envisager d'ajouter des points d'arrêt dans les méthodes correspondantes dans org.springframework.de sécurité.d'accès.de l'expression.SecurityExpressionRoot pour voir si un appel est fait avec la condition dans votre annotation.
Ce qui concerne.
Essayer avec @Sécurisé annotation,
Alors vous aurez
Voici un blog détaillée post à ce sujet.
Ce qui pourrait vous aider :
Ce qui concerne.
Aucune des réponses ci-dessus, ont travaillé pour moi. J'ai dû aller la route de l'ajout de la sécurité des décorateurs.
Décorateurs sont placés sur les haricots dans un fichier
servlet-context.xml
.D'abord l'ajouter à la sécurité de schéma pour l'espace de noms XML:
Puis appliquer le décorateur à la mise en œuvre du service de haricots, comme c'est le cas..
Ce problème va survenir lors de l'utilisation de Servlet 3 avec Web Asynchrone de Soutien. Printemps de Sécurité 3.1.4 et au-dessous de perdre leur contexte de sécurité une fois fouler le sol méthode anonyme de la
Callable
méthode.La mise à niveau de Printemps de Sécurité à 3.2.0 RC1 permettra de résoudre votre problèmes.
Maven dependency:
mettre en dessous de la balise dans un autre ressort fichier de configuration, pas au printemps de sécurité du fichier de configuration.
J'avais aussi le même message d'erreur.