Échec de l'évaluation de l'expression avec ressort de sécurité
J'ai un Ressort de service de repos, et je vais essayer d'ajouter de la sécurité. J'ai suivi ce tutoriel, mais quand j'essaie d'accéder au service directement j'obtiens l'erreur suivante:
Il y avait une erreur inattendue (type=Erreur Interne du Serveur,
statut=500). Échec de l'évaluation de l'expression 'ROLE_USER'
Voici ma configuration de sécurité:
webSecurityConfig.xml
<http entry-point-ref="restAuthenticationEntryPoint">
<intercept-url pattern="/**" access="ROLE_USER"/>
<form-login
authentication-success-handler-ref="mySuccessHandler"
authentication-failure-handler-ref="myFailureHandler"
/>
<logout />
</http>
<beans:bean id="mySuccessHandler"
class="com.eficid.cloud.security.rest.AuthenticationSuccessHandler"/>
<beans:bean id="myFailureHandler" class=
"org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"/>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="temp" password="temp" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
SpringSecurityConfig
:
public class SpringSecurityConfig {
public SpringSecurityConfig() {
super();
}
}
Je suis également d'erreur lorsque vous essayez d'utiliser curl pour vous connecter:
{
"timestamp":1460399841286,
"status":403,"error":"Forbidden",
"message":"Could not verify the provided CSRF token because your session was not found.",
"path":"/spring-security-rest/login"
}
Ai-je besoin d'ajouter le jeton csrf manuellement à la commande? Le service dispose d'un certificat auto-signé, si cela fait une différence.
Vous ne semblez pas avoir une Session HTTP.
OriginalL'auteur napstablook | 2016-04-11
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin
hasRole('ROLE_USER')
dans l'ordonnée à l'origine-url de l'élément.Voir le docs pour les autres expressions que vous pouvez utiliser.
Je vous suggère de vous poser une autre question et de fournir plus de détails, à l'instar de votre configuration...
OriginalL'auteur Evgeni Dimitrov
Si vous n'avez pas besoin TRÉSOR pour être activé, vous pouvez le désactiver dans webSecurityConfig.xml fichier comme ci-dessous:
Si CSRF est activé, vous devez inclure une _csrf.jeton dans la page que vous voulez de connexion ou de déconnexion.Le code ci-dessous doit être ajouté à la forme:
OriginalL'auteur Saif Masadeh
Spring security bloque les requêtes POST.
Pour l'activer, vous pouvez soit:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" class="form-control" />
(Par exemple:
<form id="computerForm" action="addComputer" method="POST">
<input type="hidden" name="${_csrf.parameterName}"
value="${_csrf.token}" class="form-control" />
)
Ou si vous utilisez anotation, vous pouvez permettre à la POSTE directement dans votre code en ajoutant le csrf().désactiver sur votre WebSecurityConfigurerAdapter (je n'ai pas trouvé l'équivalent xml encore) :
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.and().formLogin()
.csrf().disable()
;}
OriginalL'auteur slonepi