J'ai implémenté JWT avec Spring Security.hasRole() ne fonctionne pas avec JWT
Sécurité de ressort /login
L'url renvoie un JWT qui contient un rôle, mais lorsque j'essaie d'accéder à une URL nécessitant un rôle, elle renvoie 403
.
"timestamp": 1507840896561,
"status": 403,
"error": "Forbidden",
"message": "Access is denied",
"path": "/teacher/dashboard"
J'ai défini un rôle pour /teacher/**
comme celui-ci dans WebSecurityConfig
qui s'étend WebSecurityConfigurerAdapter
:
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/api/register").permitAll()
.antMatchers("/teacher/**").hasRole("TEACHER")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
http
.csrf().disable();
http
.formLogin()
.defaultSuccessUrl("/", true)
.and()
.addFilterBefore(new SimpleCorsFilter(), ChannelProcessingFilter.class)
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthorizationFilter(authenticationManager()));
J'ai essayé de régler le paramètre pour hasRole()
comme ROLE_TEACHER
et de sécurité du printemps m'a averti de ne pas utiliser le préfixe ROLE_
. J'ai également essayé hasAuthority("TEACHER") and again got
403`.
Payload de mon JWT:
{
"sub": "[email protected]: Username: [email protected]; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_TEACHER",
"exp": 1508704641
}
jeton a Granted Authorities: ROLE_TEACHER
mais je continue à avoir erreur d'accès refusé. Ai-je manqué quelque chose ou existe-t-il d'autres implémentations pour définir les rôles pour les urls?
Pourriez-vous s'il vous plaît ajouter les journaux Spring Security avec le niveau de jeu 'DEBUG' (dans votre configuration de journal) à votre question. – dur