spring boot AOP 구현하기.Aop를 잘 모르지만
- Http 요청이 왔을때 끼어들어 요청에 대한 권한이 있는지 체크하기 위한 AOP를 개발하려한다.
: http요청이 왔을때 실제 응답을 주기전에 권한을 체크하고 권한이 있으면 계속 진행하도록 해주고, 권한이 없으면 진행을 막는다. - 더불어 특정 controller에는 권한체크를 하지 않고, http request로 온 header안에 정보를 parameter로 전달하려한다.
- pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
- 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;
}
'우리는 개발자 > Computer' 카테고리의 다른 글
github에서 ssh key 이용하기 (0) | 2019.09.07 |
---|---|
Mysql8 spring boot hibernate 사용하기. (0) | 2019.09.07 |
spring boot servlet-api.jar runtime error / container failed during start / LifecycleException (0) | 2019.09.07 |
maven build project. goal command 정리. (0) | 2019.09.06 |
Apache httpd 버전 업그레이드 하기. (0) | 2019.08.31 |