package sample.controller; import org.aspectj.lang.annotation.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import sample.context.actor.*; import sample.context.actor.Actor.ActorRoleType; import sample.context.security.SecurityConfigurer; /** * Spring Securityの設定状況に応じてスレッドローカルへ利用者を紐付けるAOPInterceptor。 */ @Aspect @Configuration public class LoginInterceptor { @Autowired private ActorSession session; @Before("execution(* *..controller.system.*Controller.*(..))") public void bindSystem() { session.bind(Actor.System); } @After("execution(* *..controller..*Controller.*(..))") public void unbind() { session.unbind(); } /** * セキュリティの認証設定(extension.security.auth.enabled)が無効時のみ有効される擬似ログイン処理。 * <p>開発時のみ利用してください。 */ @Aspect @Component @ConditionalOnMissingBean(SecurityConfigurer.class) public static class DummyLoginInterceptor { @Autowired private ActorSession session; @Before("execution(* *..controller.*Controller.*(..))") public void bindUser() { session.bind(new Actor("sample", ActorRoleType.User)); } @Before("execution(* *..controller.admin.*Controller.*(..))") public void bindAdmin() { session.bind(new Actor("admin", ActorRoleType.Internal)); } } }