読者です 読者をやめる 読者になる 読者になる

Web系開発メモ

Java, SpringBoot, JavaScript, CSS, HTML などの記事を書いています。

SpringBoot:ロール名と認可の設定

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")  

参考文献

Spring Security Reference