Menu

キーワード

  • Spring Boot
  • Spring Security
  • PreAuthorize

したいこと

ロール(roles)に紐づける権限(authorities)に応じて、特定の処理をガードしたい。権限があるユーザーだけが処理できるように。

どうやって

URLを拾ってガードすることもできるようだけど、権限の分だけURLの名前をつけ分けることは難しいので、サービスのメソッドにガードをかけるようにする。

  • Some情報を追加するメソッドを
  • ADD_SOME_DATA権限をもつユーザーだけ実行できる

ようにする。

@PreAuthorize("hasAuthority('ADD_SOME_DATA')")
@Transactional(readOnly = false)
fun add(someData: SomeData) {
  /* ガードがかかる追加処理 */
}

文字列で設定するのが少し気持ち悪い。開発初期の段階で、権限の名称を変えるときなんかに注意。

ちなみに

有効化

@PreAuthorizeによる権限チェックをするにはSecurityConfigで次の設定をする必要がある。

@EnableGlobalMethodSecurity(prePostEnabled = true) // <-- これ
@Configration
class SecurityConfig: WebSecurityConfigurerAdapter {
  ...

範囲

@PreAuthorizeをクラスにつければどのメソッドでも権限チェックできる。

参考

スポンサーリンク