spring boot AOP 구현하기.
Aop를 잘 모르지만

  • Http 요청이 왔을때 끼어들어 요청에 대한 권한이 있는지 체크하기 위한 AOP를 개발하려한다.
    : http요청이 왔을때 실제 응답을 주기전에 권한을 체크하고 권한이 있으면 계속 진행하도록 해주고, 권한이 없으면 진행을 막는다.
  • 더불어 특정 controller에는 권한체크를 하지 않고, http request로 온 header안에 정보를 parameter로 전달하려한다.
  1. pom.xml
    <dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
  1. AopConfig.java
    @Around 이노테이션으로 requestMapping으로 들어오는 요청에 대해서 AOP를 적용할것임을 명시.
    특정 controller 접근시에는 parameter를 넘겨주도록했음.
    주석 참고.
@Configuration
@Aspect
@EnableAspectJAutoProxy() 
public class AopConfig { 
    ...
    @Around("@annotation(requestMapping)") 
    public final Object checkPermission(final ProceedingJoinPoint pjp
                                      , final RequestMapping requestMapping){
        .... 
        //권한을 체크하는 함수에서 true값을 return해주면 계속해서 진행 
        if (permission.check(pjp, requestMapping, httpServletRequest)) { 
            return pjp.proceed();
        } 

        ....
        String email = .... ;
        //특정 controller접근시에는 권한체크는 하지 않고 파라미터만 전달하여 계속 진행
        if (pjp.getSignature().toString().contains("com.xxx.xxx.controller.xxx")) {
            return pjp.proceed(new Object\[\]{email});
        } 
        ... 


        //권한 없는 경우 null을 return하여 계속해서 진행할 수 없음. 
        return null; 
        } 
 }

참고.
proceedjointpoint로 parameter를 넘겨줄때는 넘겨준 parameter와 동일한 명칭, 순서로 받아야한다.

@ResponseBody 
@RequestMapping(method = RequestMethod.GET, value = "/user") 
public LoginUser getLoginEmail(final String email) { 
    LoginUser loginUser = new LoginUser(); 
    loginUser.setEmail(email);
    return loginUser;
}

+ Recent posts