2017-01-30 11 views
3

注釈でhasRoleメソッドを使用することができません。またrequest.isUserInRole(“ADMIN”)falseとなります。私は何が欠けていますか? .hasAuthority(“ADMIN”)が問題なく動作しますがSpringbootセキュリティhasRoleが機能しない

データベースからユーザーに権限を割り当てています。あなたはSpring Security Referenceを参照してください、isUserInRoleを使用する接頭辞ROLE_であなたの権限に名前を付ける必要があり

答えて

7

SecurityContextHolder.getContext().getAuthentication().getAuthorities()isUserInRole(String)に渡す役割をGrantedAuthorityが含まれている場合

をHttpServletRequest.isUserInRole(文字列)を決定します。通常、ユーザーは自動的に追加されるため、このメソッドに "ROLE_"接頭辞を渡すべきではありません。あなたは、現在のユーザーが権限「ROLE_ADMIN」を持っているかどうかを判断する場合たとえば、あなたは次のように使用できます(また、hasAnyRolehasRoleため

boolean isAdmin = httpServletRequest.isUserInRole("ADMIN"); 

同じことを、Spring Security Reference参照してください。

現在のプリンシパルに指定されたロールがある場合はtrueを返します。デフォルトでは、指定されたロールが 'ROLE_'で始まらない場合、追加されます。これはdefaultRolePrefixDefaultWebSecurityExpressionHandlerに変更することでカスタマイズできます。

+0

ありがとうございます。私はこれ以上数時間を無駄にしていた。しかし、PreAuthorizeは私のコントローラでは動作していません。コントローラーレイヤーでは動作せず、サービスレイヤーでのみ動作するはずですか? –

+2

この問題は、セキュリティ設定で@EnableGlobalMethodSecurity(prePostEnabled = true)を使用することによっても解決されます。 –

関連する問題