Search Results for 'AOP'

2 POSTS

  1. 2010.08.26 Spring AOP를 이용한 로그인 체크
  2. 2007.08.14 Spring AOP execution사용법

Spring AOP를 이용한 로그인 체크

Posted 2010. 8. 26. 17:12
Spring 의 AOP기능을 이용한 로그인 체크 관련 팁을 찾아보면 대부분 HandlerInterceptorAdapter를 사용하라고 나온다.
preHandle에서 session을 체크하고 없으면 throws Exception 하던지 response.sendRedirect 시켜서 이동하는 식이다.

하지만 이방법은 xml설정에서 몇몇 메소드나 클래스에만 적용하려는 것에 해당된다.
annotation을 사용하여 controller 전체를 scan하는 시스템에서는 login화면이나 login submit 조차도 이 HandlerInterceptorAdapter에서 걸러지기 때문에 사용할수가 없다.(적어도 많은 고민을 해 보았지만 해답이 없었다.)
특히 인트라넷 같은 경우 로그인 화면 이외는 모두 로그인을 해야  접속이 가능한 경우라서 이런 경우 더더욱 그렇다.

본인의 경우에는 InterceptorAdapter를 사용하기 보단 @Aspect를 이용한 Proxy를 사용함으로써 일단 해결했다.


@Before("execution(* *com..*Controller.*(..))")
 public void joinPoint() throws Throwable
{
}

위와 같이 joinPoint의 Before에 모든 Controller를 체크하도록 한 뒤에 로그인 관련 Controller만 이름을 달리해서 사용하도록 하였다.
패키지로 따로 빼놓은뒤 구분하는 방법도 있었으나 그러기엔 고쳐야 할 부분이 너무 많아 일단 이렇게 처리.

테스트 후 잘 돌아가긴 하는데, 조금더 심도 있게 연구해 봐야 할듯 싶다.
annotation을 사용하는 3.0에서 HandlerInterceptorAdapter 를 이용한 로그인 체크가 어떻게 이루어 지는지도...



Spring AOP execution사용법

Posted 2007. 8. 14. 17:54

Spring 2.0 스타일로 Transaction 처리를 위해 선언하는 방법을 알아보다가..
알게 된 사실...
 execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)  throws-pattern?)

modifiers-pattern : 접근지시자에 대한 패턴, 생략가능
ret-type-pattern  : 리턴타입은 필수, * 으로 처리가능
declaring-type-pattern? : 타입패턴? 잘몰겠다. 생략가능
name-pattern(param-pattern) : 메소드 네임패턴(파라메터 패턴), 생략가능
throws-pattern? : Exception 에 대한 패턴, 생략가능

1. ececution( package.Sample  *.insert*(..))
==> 접근지시자 생략, Sample 객체를 리턴하는 insert로 시작하는 모든 메소드
   ececution( package.Sample  *.Member.*(..))
==> Member 클래스내의 모든 메소드.

2. execution(*  *.insert*(..))
==> insert로 시작하는 모든 메소드

근데 현재 저렇게 하는데... TypeMisMath 어쩌구 저쩌구 에러난다... Sample 따라하면 에러 안나는데..

뭐가 문젤까?..