From fc84fc3fda512a2dbd5084e01df19725a2998af4 Mon Sep 17 00:00:00 2001 From: s-choi Date: Thu, 10 Sep 2026 15:55:25 +0900 Subject: [PATCH] =?UTF-8?q?[STYLE]=20aspect=E3=81=AE=E7=84=A1=E9=A7=84?= =?UTF-8?q?=E3=81=AA=E6=94=B9=E8=A1=8C=E3=82=84=E3=82=B9=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=81=AA=E3=81=A9=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rhizome/aop/aspect/PermissionCheck.java | 4 - .../aop/aspect/PermissionCheckAspect.java | 128 ++++++------------ .../rhizome/aop/aspect/SessionCheck.java | 4 - .../aop/aspect/SessionCheckAspect.java | 47 +++---- 4 files changed, 65 insertions(+), 118 deletions(-) diff --git a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheck.java b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheck.java index 861f94a..a6d3c9d 100644 --- a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheck.java +++ b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheck.java @@ -5,10 +5,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * SessionCheckアノテーション - * セッションチェックを行うメソッドに付与する - */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface PermissionCheck { diff --git a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java index ce416f9..92ad061 100644 --- a/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java +++ b/src/main/java/com/example/rhizome/aop/aspect/PermissionCheckAspect.java @@ -1,114 +1,76 @@ package com.example.rhizome.aop.aspect; -import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; -import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; -import com.example.rhizome.app.presentation.form.LoginUserForm; -import com.example.rhizome.exception.InsufficientPermissionException; +import javax.servlet.http.HttpServletRequest; + import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletRequest; +import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; +import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; +import com.example.rhizome.app.presentation.form.LoginUserForm; +import com.example.rhizome.exception.InsufficientPermissionException; -/** - * 権限チェック用のAOP - */ @Aspect @Component public class PermissionCheckAspect { - HttpServletRequest request; + HttpServletRequest request; - @Autowired - public PermissionCheckAspect(HttpServletRequest request) { - this.request = request; - } + @Autowired + public PermissionCheckAspect(HttpServletRequest request) { + this.request = request; + } - // Aspectのフックを定義(今回はPermissionCheckアノテーションが定義されているメソッドが動作するタイミング) - @Pointcut("@annotation(com.example.rhizome.aop.aspect.PermissionCheck)") - public void permissionCheckMethod() { - } + @Pointcut("@annotation(com.example.rhizome.aop.aspect.PermissionCheck)") + public void permissionCheckMethod() { + } - /** - * 権限チェック - */ - @Before("permissionCheckMethod()") - public void checkPermission() { - // ログインユーザの取得 - LoginUserForm loginUserForm = (LoginUserForm) request.getSession().getAttribute(SessionKeyword.LOGIN_USER); + @Before("permissionCheckMethod()") + public void checkPermission() { + LoginUserForm loginUserForm = (LoginUserForm) request.getSession().getAttribute(SessionKeyword.LOGIN_USER); - // ログインユーザが取得できない場合、または権限がない場合はエラー画面に遷移 - if (loginUserForm == null || !hasRequiredPermission(request.getRequestURI(), loginUserForm)) { - throw new InsufficientPermissionException("不正な遷移です"); - } + if (loginUserForm == null || !hasRequiredPermission(request.getRequestURI(), loginUserForm)) { + throw new InsufficientPermissionException("不正な遷移です"); + } - } + } - /** - * 遷移先のURLとログインユーザの権限から、遷移可否を判定する - * - * @param targetURL 遷移したいURL - * @param loginUserForm リクエスト元のユーザ - * @return true:遷移可 false:遷移不可 - */ - private boolean hasRequiredPermission(String targetURL, LoginUserForm loginUserForm) { + private boolean hasRequiredPermission(String targetURL, LoginUserForm loginUserForm) { - // 管理者権限 - if (isAdminTransition(targetURL, loginUserForm)) { - return true; - } + if (isAdminTransition(targetURL, loginUserForm)) { + return true; + } - // 一般権限 - if (isUserTransition(targetURL, loginUserForm)) { - return true; - } + if (isUserTransition(targetURL, loginUserForm)) { + return true; + } - // アクセス不許可の場合の処理(不正アクセス画面に遷移) - return false; + return false; - } + } - /** - * 管理者用のアカウントで管理者向けのページアクセスか - * - * @param targetURL 遷移したいURL - * @param loginUserForm リクエスト元のユーザ - * @return true:遷移可 false:遷移不可 - */ - private boolean isAdminTransition(String targetURL, LoginUserForm loginUserForm) { + private boolean isAdminTransition(String targetURL, LoginUserForm loginUserForm) { - // 管理者か - if (!loginUserForm.isAdminUser()) { - return false; - } + if (!loginUserForm.isAdminUser()) { + return false; + } + if (!TransitionTargetPageNameKeyword.getAdminPageList().contains(targetURL)) { + return false; + } - // 管理者向けのページ遷移か - if (!TransitionTargetPageNameKeyword.getAdminPageList().contains(targetURL)) { - return false; - } + return true; + } - return true; - } + private boolean isUserTransition(String targetURL, LoginUserForm loginUserForm) { - /** - * 一般ユーザ用のアカウントで一般ユーザ向けのページアクセスか - * - * @param targetURL 遷移したいURL - * @param loginUserForm リクエスト元のユーザ - * @return true:遷移可 false:遷移不可 - */ - private boolean isUserTransition(String targetURL, LoginUserForm loginUserForm) { + if (loginUserForm.isAdminUser()) { + return false; + } - // 管理者か - if (loginUserForm.isAdminUser()) { - return false; - } + return TransitionTargetPageNameKeyword.getUserPageList().contains(targetURL); - // 一般ユーザ向けのページ遷移か - return TransitionTargetPageNameKeyword.getUserPageList().contains(targetURL); - - } + } } - diff --git a/src/main/java/com/example/rhizome/aop/aspect/SessionCheck.java b/src/main/java/com/example/rhizome/aop/aspect/SessionCheck.java index aa2f411..c48c83f 100644 --- a/src/main/java/com/example/rhizome/aop/aspect/SessionCheck.java +++ b/src/main/java/com/example/rhizome/aop/aspect/SessionCheck.java @@ -5,10 +5,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * SessionCheckアノテーション - * セッションチェックを行うメソッドに付与する - */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface SessionCheck { diff --git a/src/main/java/com/example/rhizome/aop/aspect/SessionCheckAspect.java b/src/main/java/com/example/rhizome/aop/aspect/SessionCheckAspect.java index 3bf4ba9..c53d52b 100644 --- a/src/main/java/com/example/rhizome/aop/aspect/SessionCheckAspect.java +++ b/src/main/java/com/example/rhizome/aop/aspect/SessionCheckAspect.java @@ -1,47 +1,40 @@ package com.example.rhizome.aop.aspect; -import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; -import com.example.rhizome.exception.NoSessionException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; +import com.example.rhizome.exception.NoSessionException; -/** - * セッションチェック用のAOP - */ @Aspect @Component public class SessionCheckAspect { - HttpServletRequest request; + HttpServletRequest request; - @Autowired - public SessionCheckAspect(HttpServletRequest request) { - this.request = request; - } + @Autowired + public SessionCheckAspect(HttpServletRequest request) { + this.request = request; + } - @Pointcut("@annotation(com.example.rhizome.aop.aspect.SessionCheck)") - public void sessionCheckMethod() { - } + @Pointcut("@annotation(com.example.rhizome.aop.aspect.SessionCheck)") + public void sessionCheckMethod() { + } - /** - * セッションチェック - */ - @Before("sessionCheckMethod()") - public void checkSession() { - // セッションの取得 - HttpSession session = request.getSession(false); + @Before("sessionCheckMethod()") + public void checkSession() { + HttpSession session = request.getSession(false); - // セッションが取得できない場合はエラー画面に遷移 - if (session == null || session.getAttribute(SessionKeyword.LOGIN_USER) == null) { - throw new NoSessionException("不正なログインです"); - } + if (session == null || session.getAttribute(SessionKeyword.LOGIN_USER) == null) { + throw new NoSessionException("不正なログインです"); + } - } + } }