以下のような仕様のリクエスト共通処理を ControllerAdvice として実装しようと思いました。
- AuthenticationPrincipal に保存された情報をもとに、パッケージごとに Controller へのアクセス制御をおこなう。
- ページへのリクエストがあるたびに共通の処理を差し込む。
リクエストの共通処理で ControllerAdvice を書くと、 IDE でハンドラメソッド(@GetMapping
などを付与したメソッド)と処理が分かれてしまうので、個人的には好きではありません。
それが複数ファイルに分かれると、さらに見通しが悪くなるんじゃないかと考えました。
そこで、一つのファイルにまとめてしまえば、見通しの悪さが改善されるのではないかと思いました。
public class ControllerAdviceConainer { @ControllerAdvive(basePackageClasses = Alpha.class) @Order(1) public static class AccessControlAlpha { @ModelAttribute public void method() {} } @ControllerAdvive(basePackageClasses = Beta.class) @Order(1) public static class AccesssControlBeta { @ModelAttribute public void method() {} } @ControllerAdvive(basePackageClasses = {Alpha.class, Beta.class}) @Order(2) public static class Common { @ModelAttribute public void method() {} } }
アクセス制御は Spring Security で実装すればよかったと実装し終わってから気づいたのは、ここだけの秘密です。 もっと上手いやり方があれば知りたいと思いました。