私はSpring SecurityでJWTを実装しました。hasRole()はJWTで動作しません
スプリングセキュリティ/login
urlはロールを含むJWTを返しますが、ロールを必要とするURLにアクセスしようとすると、403
を返します。
"timestamp": 1507840896561,
"status": 403,
"error": "Forbidden",
"message": "Access is denied",
"path": "/teacher/dashboard"
は私が
WebSecurityConfigurerAdapter
拡張
WebSecurityConfig
にこのような
/teacher/**
の役割を定義した:
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()));
私はROLE_TEACHER
としてhasRole()
のためのパラメータを設定しようとしましたが、春のセキュリティはROLE_
接頭辞を使用しないように私に警告しました。私もhasAuthority("TEACHER") and again got
403を試しました。私のJWTの
ペイロード:
{
"sub": "[email protected]: Username: [email protected]; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_TEACHER",
"exp": 1508704641
}
トークンはGranted Authorities: ROLE_TEACHER
持っていますが、私がアクセス拒否エラーを取得しておきます。何か不足しているのですか、またはURLの役割を定義するための実装が他にありますか?
あなたの質問に「DEBUG」レベルが設定された(ログ設定で)Springセキュリティログを追加してください。 – dur