Printemps de Sécurité 403 Accès refusé après le post
J'ai essayé presque tout dans les autres posts à ce sujet, rien n'est lié à mon problème.
Si j'essaie de récupérer mon URL via GET (ex: chemin d'accès/utilisateurs/modifier/1 ) tout fonctionne bien et je l'ai redirigé vers l'utilisateur de modifier la page, mais Si j'essaie d'accéder à cette page via la POSTE, le printemps de sécurité nier mon accès à la page.
Les deux méthodes sont mappés dans ma classe de contrôleur.
@RequestMapping(value="/users/edit/{id}", method={RequestMethod.POST,RequestMethod.GET})
public ModelAndView login(ModelAndView model, @PathVariable("id") int id ) {
model.addObject("user", this.userService.getUserById(id));
model.setViewName("/users/add"); //add.jsp
return model;
}
Mon formulaire j'utilise post
<f:form method="post" action="/users/edit/${user.id}">
<button type="submit">Edit</button>
</f:form>
Printemps security.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" 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.2.xsd">
<!-- enable use-expressions -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/secure**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />
<intercept-url pattern="/secure/users**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />
<!-- access denied page -->
<access-denied-handler error-page="/denied" />
<form-login
login-page="/home"
default-target-url="/secure"
authentication-failure-url="/home?error"
username-parameter="inputEmail"
password-parameter="inputPassword" />
<logout logout-success-url="/home?logout" />
<!-- enable csrf protection -->
<csrf/>
</http>
<!-- Select users and user_roles from database -->
<authentication-manager>
<authentication-provider>
<password-encoder hash="md5" />
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query=
"SELECT login, senha, ativo
FROM usuarios
WHERE login = ?"
authorities-by-username-query=
"SELECT u.login, r.role
FROM usuarios_roles r, usuarios u
WHERE u.id = r.usuario_id
AND u.login = ?" />
</authentication-provider>
</authentication-manager>
Vous pouvez poster votre configuration de sécurité?
On dirait que votre configuration est plus stricte pour les POST que d'OBTENIR. Vous pouvez poster la configuration
Ajouté Spring-security.xml
Est le getUserById méthode annotée avec @Sécurisé ou @exiger une autorisation préalable?
non, juste Remplacer
On dirait que votre configuration est plus stricte pour les POST que d'OBTENIR. Vous pouvez poster la configuration
Ajouté Spring-security.xml
Est le getUserById méthode annotée avec @Sécurisé ou @exiger une autorisation préalable?
non, juste Remplacer
OriginalL'auteur Lucas Freitas | 2015-06-24
Vous devez vous connecter pour publier un commentaire.
J'ai remarqué que vous êtes à l'aide de la protection csrf, qui, par défaut, protège les HTTP verbe qui modifie une ressource (par exemple, PUT, POST, DELETE,...). Si vous êtes à l'aide de Printemps de la balise form, un jeton csrf devrait être automatiquement inclus comme un caché d'entrée dans votre formulaire. Vous devriez vérifier la source dans votre navigateur pour vérifier que le jeton csrf est là, sinon, vous aurez besoin de quelque chose comme ceci:
Vous pouvez en lire plus à propos de protection csrf/configuration au Printemps de référence.
OriginalL'auteur ikumen
Vous pouvez simplement utiliser
<sec:csrfInput/>
balise suivante :Et s'il vous plaît assurez-vous d'importer le printemps de balises de sécurité
OriginalL'auteur Ahmad Al-Kurdi