접속로그 관련 문의입니다.
- 작성자 :
- 윤*원
- 작성일 :
- 2013-09-02 20:02:21
- 조회수 :
- 2,071
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
안녕하세요.
공통컴포넌트 접속로그 관련해서 문의 드립니다.
일단 제가 설치 해놓은 전자정부 프레임워크 환경은
1. 표준프레임워크 2.6 통합 다운로드를 통해 이클립스 설치
2. 이클립스상에서 공통 컴포넌트 추가(Add eGovFrame Common Component)를 이용 해서 로그인, 권한관리, 로그 관리 등을 붙여 놓은 상태입니다.
그리고 질문드릴 내용은..
- 공통 컴포넌트 로그인, 로그관리(접속로그관리) 만 붙여 놓은 상태에서는 egov-com-loginaop.xml 에 설정대로
egovframework.com.sym.log.clg.service.EgovLoginLogAspect의 logLogin 메소드가 정상적으로 실행됩니다.
- 하지만 공통컴포넌트 로그인, 로그관리(접속로그관리)에다 역할/권한관리 까지 붙이고 spring-security 설정 주석까지 풀어 놓으면
로그인은 정상적으로 되지만 접속로그가 남지 않습니다.
그래서 egov-com-loginaop.xml 의 pointcut 의 설정을 actionMain(egovframework.com.uat.uia.web.EgovLoginController.actionMain)이
아닌 loginUsrView(egovframework.com.uat.uia.web.EgovLoginController.loginUsrView)으로 설정해 놨더니 로그인 화면을 호출할때마다
정상적으로 egovframework.com.sym.log.clg.service.EgovLoginLogAspect의 logLogin 메소드가 실행됐습니다.
- spring security를 이용하여 로그인 하게 되면 egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter.doFilter 을 통해
로그인 또는 인증 절차를 거치게 되는걸로 파악 하고 있는데요
이 메소드를 통해 로그인 하는 loginVO = loginService.actionLogin(loginVO); 구문의 actionLogin 을 aop pointcut 처리 해도
logLogin 메소드(접속로그 생성)는 여전히 실행 안됐습니다.
물론 egov-com-loginaop.xml 최초 설정인 egovframework.com.uat.uia.web.EgovLoginController.actionMain 으로 pointcut 설정을 해놔도
logLogin 메소드는 실행이 안됐습니다.
egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter.doFilter 를 통해 actionLogin 메소드나 actionMain 메서드를
실행하면 egov-com-loginaop.xml 에서 안먹는게 아닌지 의심됩니다.(왜냐하면 spring security doFilter를 타기 전인 EgovLoginLogAspect의
logLogin 메소드를 pointcout 처리하면 logLogin 메소드(접속로그 생성)가 실행됩니다.)
제가 뭘 잘못 파악 하고 있는건지....
아니면 설정을 잘못 한건지...
답변 부탁드립니다.
지속적인 질문에도 정성어린 답변에 정말 감사드립니다.
공통컴포넌트 접속로그 관련해서 문의 드립니다.
일단 제가 설치 해놓은 전자정부 프레임워크 환경은
1. 표준프레임워크 2.6 통합 다운로드를 통해 이클립스 설치
2. 이클립스상에서 공통 컴포넌트 추가(Add eGovFrame Common Component)를 이용 해서 로그인, 권한관리, 로그 관리 등을 붙여 놓은 상태입니다.
그리고 질문드릴 내용은..
- 공통 컴포넌트 로그인, 로그관리(접속로그관리) 만 붙여 놓은 상태에서는 egov-com-loginaop.xml 에 설정대로
egovframework.com.sym.log.clg.service.EgovLoginLogAspect의 logLogin 메소드가 정상적으로 실행됩니다.
- 하지만 공통컴포넌트 로그인, 로그관리(접속로그관리)에다 역할/권한관리 까지 붙이고 spring-security 설정 주석까지 풀어 놓으면
로그인은 정상적으로 되지만 접속로그가 남지 않습니다.
그래서 egov-com-loginaop.xml 의 pointcut 의 설정을 actionMain(egovframework.com.uat.uia.web.EgovLoginController.actionMain)이
아닌 loginUsrView(egovframework.com.uat.uia.web.EgovLoginController.loginUsrView)으로 설정해 놨더니 로그인 화면을 호출할때마다
정상적으로 egovframework.com.sym.log.clg.service.EgovLoginLogAspect의 logLogin 메소드가 실행됐습니다.
- spring security를 이용하여 로그인 하게 되면 egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter.doFilter 을 통해
로그인 또는 인증 절차를 거치게 되는걸로 파악 하고 있는데요
이 메소드를 통해 로그인 하는 loginVO = loginService.actionLogin(loginVO); 구문의 actionLogin 을 aop pointcut 처리 해도
logLogin 메소드(접속로그 생성)는 여전히 실행 안됐습니다.
물론 egov-com-loginaop.xml 최초 설정인 egovframework.com.uat.uia.web.EgovLoginController.actionMain 으로 pointcut 설정을 해놔도
logLogin 메소드는 실행이 안됐습니다.
egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter.doFilter 를 통해 actionLogin 메소드나 actionMain 메서드를
실행하면 egov-com-loginaop.xml 에서 안먹는게 아닌지 의심됩니다.(왜냐하면 spring security doFilter를 타기 전인 EgovLoginLogAspect의
logLogin 메소드를 pointcout 처리하면 logLogin 메소드(접속로그 생성)가 실행됩니다.)
제가 뭘 잘못 파악 하고 있는건지....
아니면 설정을 잘못 한건지...
답변 부탁드립니다.
지속적인 질문에도 정성어린 답변에 정말 감사드립니다.
A
안녕하세요. 윤종원님.
우선 처리 흐름을 설명드리면 다음과 같습니다.
- 모든 *.do는 EgovSpringSecurityLoginFilter 필터에 의해 먼저 처리됩니다.
- 이 때, 내부 처리 상에 로그인을 처리하는 URL(/uat/uia/actionLogin)이 요청된 경우라면, Spring security를 처리하는 filter는 내부적으로 호출(springSecurity.doFilter())합니다.
- 이 때 securit security 설정(context-security.xml) 상에 로그인 처리가 되고, default-target-url에 정의된 /uat/uia/actionMain.do url이 호출됩니다.
- /uat/uia/actionMain.do 호출 시에 EgovLoginController.actionMain() 메소드가 호출되며, egov-com-loginaop.xml에 의해 loginlog가 처리되는 것이 정상이나,
* Spring security 내부 호출 방식에 의해 AOP가 적용되지 않는 것 같습니다.
이 경우는 Service 부분에 AOP를 추가해서 반영해 놓으시면 되실 것 같습니다.
(서비스쪽의 경우는 root WebApplicationContext 즉, ContextLoaderListener에 의해 지정된 부분에 AOP 설정 필요)
/src/main/resources/ 밑에 egovframework/resources/egovframework/spring/com/context-loginaop.xml 파일을 다음 처럼 구성해 놓으시면 되실 것 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- login Log Aspect -->
<bean id="egov.loginlog" class="egovframework.com.sym.log.clg.service.EgovLoginLogAspect" />
<aop:config>
<aop:aspect id="egov.loginLogAspect" ref="egov.loginlog">
<!-- 로그인 Method -->
<aop:before pointcut="execution(public * egovframework.com.uat.uia.service.EgovLoginService.actionLogin(..))" method="logLogin" />
</aop:aspect>
</aop:config>
</beans>
그럼, 즐거운 하루되십시오.
감사합니다.
우선 처리 흐름을 설명드리면 다음과 같습니다.
- 모든 *.do는 EgovSpringSecurityLoginFilter 필터에 의해 먼저 처리됩니다.
- 이 때, 내부 처리 상에 로그인을 처리하는 URL(/uat/uia/actionLogin)이 요청된 경우라면, Spring security를 처리하는 filter는 내부적으로 호출(springSecurity.doFilter())합니다.
- 이 때 securit security 설정(context-security.xml) 상에 로그인 처리가 되고, default-target-url에 정의된 /uat/uia/actionMain.do url이 호출됩니다.
- /uat/uia/actionMain.do 호출 시에 EgovLoginController.actionMain() 메소드가 호출되며, egov-com-loginaop.xml에 의해 loginlog가 처리되는 것이 정상이나,
* Spring security 내부 호출 방식에 의해 AOP가 적용되지 않는 것 같습니다.
이 경우는 Service 부분에 AOP를 추가해서 반영해 놓으시면 되실 것 같습니다.
(서비스쪽의 경우는 root WebApplicationContext 즉, ContextLoaderListener에 의해 지정된 부분에 AOP 설정 필요)
/src/main/resources/ 밑에 egovframework/resources/egovframework/spring/com/context-loginaop.xml 파일을 다음 처럼 구성해 놓으시면 되실 것 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- login Log Aspect -->
<bean id="egov.loginlog" class="egovframework.com.sym.log.clg.service.EgovLoginLogAspect" />
<aop:config>
<aop:aspect id="egov.loginLogAspect" ref="egov.loginlog">
<!-- 로그인 Method -->
<aop:before pointcut="execution(public * egovframework.com.uat.uia.service.EgovLoginService.actionLogin(..))" method="logLogin" />
</aop:aspect>
</aop:config>
</beans>
그럼, 즐거운 하루되십시오.
감사합니다.