Spring AOP를 이용한 로그인 체크
Posted 2010. 8. 26. 17:12Spring 의 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 를 이용한 로그인 체크가 어떻게 이루어 지는지도...
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' 카테고리의 다른 글
DBCP ConnectionPool 설정값에 대한 설명 (0) | 2010.12.23 |
---|---|
Cron Expression 예제 (0) | 2010.09.08 |
[링크]Spring - Interceptor 를 사용한 login 처리 (0) | 2010.06.10 |
[링크]Spring MVC를 이해하기 위한 설명 (0) | 2010.06.10 |
[링크]CommandMapArgumentResolver (0) | 2010.06.09 |
- Filed under : 개발노트/Spring