Spring Security のロール名について、プログラムの設定値とDBの設定値の違いをまとめてみました。
例として、管理者のロール ROLE_ADMIN
を設定することにしています。
プログラムの設定値(認可)
管理者のロールは、ROLE_
を省略して ADMIN
という文字列で設定します。
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/html/**", "/css/**", "/js/**").permitAll() // ↓ ADMIN だけが、/admin 配下にアクセス可能。 .antMatchers("/admin", "/admin/**").hasRole("ADMIN") .anyRequest().authenticated() .and() // 省略・・・ }
DBの設定値(認証情報)
管理者のロールは、ROLE_ADMIN
で設定します。
> select username, authority from users; username | authority ---------------+------------ 3@test.com | ROLE_USER 2@test.com | ROLE_USER 1@test.com | ROLE_ADMIN
プログラムの設定値について
Spring Security 4.0 から、プログラムは .hasRole(String)
を 使って ROLE_
を省略するようです。
下の例のように、.access(String)
だとプレフィックスが必要になるみたいです。
.antMatchers("/admin", "/admin/**").access("ROLE_ADMIN")