서비스에 어노테이션으로 aop를 조정할 수 있다. 만약 서비스에서 로그인 관련 체크를 한다면 어노테이션을 선언하고 메서드에 어노테이션을 선언하는 것 만으로 aop 를 적용할 수 있다.
1. 인터페이스 선언
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SecurityCheck {
}
타겟을 메서드에 준다
2. 체크할 포인트를 선언
@Aspect
@Component
public class SecurityChecker {
private static final Logger logger = LoggerFactory.getLogger(SecurityChecker.class);
@Pointcut("@annotation(SecurityCheck)")
public void checkMethodSecurity() {}
@Around("checkMethodSecurity()")
public Object checkSecurity (ProceedingJoinPoint joinPoint) throws Throwable {
logger.debug("Checking method security...");
// TODO Implement security check logics here
Object result = joinPoint.proceed();
return result;
}
}
TODO 부분에 실제로 체크해야할 내용을 삽입한다.
3. 서비스 메서드에 적용
@SecurityCheck
@Transactional(noRollbackFor = { UnsupportedOperationException.class })
public Message save(String text)