[재질문] 권한 인증 security 모드에서 사용자 IP
- 작성자 :
- 전*영
- 작성일 :
- 2018-11-08 10:19:58
- 조회수 :
- 2,000
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
다시 질문 드리겠습니다.
지금 제가 개발하고 있는 시스템은 권한인증을 security 로 하고 있다고 지난번 질문에 적었었습니다.
저의 질문을 이해하시지 못하신듯 합니다.
security 모드에서는 EgovLoginController 컨트롤러내 url /uat/uia/actionLogin.do 을 타지 않고
EgovSpringSecurityLoginFilter 필터에서 사용자 로그인 처리하는 것으로 알고 있습니다.
지금 현재 EgovSpringSecurityLoginFilter 소스에서도
loginVO.setIp(request.getRemoteAddr());
//세션 로그인
session.setAttribute("loginVO", loginVO); 로 되어 있습니다.
하지만 시스템로그를 생성하는 EgovSysLogAspect 에서는 session 정보를 사용하지 않고 있습니다.
/* Authenticated */
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if(isAuthenticated.booleanValue()) {
LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
uniqId = user.getUniqId();
ip = user.getIp();
}
sysLog.setSrvcNm(className);
sysLog.setMethodNm(methodName);
sysLog.setProcessSeCode(processSeCode);
sysLog.setProcessTime(processTime);
sysLog.setRqesterId(uniqId);
sysLog.setRqesterIp(ip);
sysLogService.logInsertSysLog(sysLog);
로 되어 있어서 DB를 확인 해보면 RqesterIp 값은 ""로 되어 있습니다.
제가 궁금해 하는 부분은 security 모드인 겨우
LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
ip = user.getIp();
에서 ip가 항상 "" 인 것이냐 입니다.
다시 답변 부탁드리겠습니다.
지금 제가 개발하고 있는 시스템은 권한인증을 security 로 하고 있다고 지난번 질문에 적었었습니다.
저의 질문을 이해하시지 못하신듯 합니다.
security 모드에서는 EgovLoginController 컨트롤러내 url /uat/uia/actionLogin.do 을 타지 않고
EgovSpringSecurityLoginFilter 필터에서 사용자 로그인 처리하는 것으로 알고 있습니다.
지금 현재 EgovSpringSecurityLoginFilter 소스에서도
loginVO.setIp(request.getRemoteAddr());
//세션 로그인
session.setAttribute("loginVO", loginVO); 로 되어 있습니다.
하지만 시스템로그를 생성하는 EgovSysLogAspect 에서는 session 정보를 사용하지 않고 있습니다.
/* Authenticated */
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if(isAuthenticated.booleanValue()) {
LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
uniqId = user.getUniqId();
ip = user.getIp();
}
sysLog.setSrvcNm(className);
sysLog.setMethodNm(methodName);
sysLog.setProcessSeCode(processSeCode);
sysLog.setProcessTime(processTime);
sysLog.setRqesterId(uniqId);
sysLog.setRqesterIp(ip);
sysLogService.logInsertSysLog(sysLog);
로 되어 있어서 DB를 확인 해보면 RqesterIp 값은 ""로 되어 있습니다.
제가 궁금해 하는 부분은 security 모드인 겨우
LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
ip = user.getIp();
에서 ip가 항상 "" 인 것이냐 입니다.
다시 답변 부탁드리겠습니다.
A
안녕하세요.
표준프레임워크센터 입니다.
Security모드인경우
EgovSpringSecurityLoginFilter에서 처리되는게 맞습니다.
해당 부분에서의 IP는 센터에서 테스트시 제대로 인식이 되었습니다.
기재하신대로 AOP설정으로 로그를 출력하는 부분에서는
user.getIp() 부분이 공백인 부분도
""으로 출력되고 있는것을 확인하였습니다.
그이유는
EgovUserDetailsHelper.getAuthenticatedUser()에서
EgovUserDetailsService를 참조하게 되는데
세션이냐 시큐리티냐에따라 구현체가 다르게 설계되어 있습니다.
각각 다음 구현체로 되어 있습니다.
EgovUserDetailsSecurityServiceImpl
EgovUserDetailsSessionServiceImpl
시큐리티 인경우는 VO가
Spring security를 기반으로
전자정부표준프레임워크에서 확장하여 사용하고 있는데
IP를 가지고 있지 않습니다.
따라서 항상 공백을 리턴하게 되었던 것입니다.
감사합니다.
표준프레임워크센터 입니다.
Security모드인경우
EgovSpringSecurityLoginFilter에서 처리되는게 맞습니다.
해당 부분에서의 IP는 센터에서 테스트시 제대로 인식이 되었습니다.
기재하신대로 AOP설정으로 로그를 출력하는 부분에서는
user.getIp() 부분이 공백인 부분도
""으로 출력되고 있는것을 확인하였습니다.
그이유는
EgovUserDetailsHelper.getAuthenticatedUser()에서
EgovUserDetailsService를 참조하게 되는데
세션이냐 시큐리티냐에따라 구현체가 다르게 설계되어 있습니다.
각각 다음 구현체로 되어 있습니다.
EgovUserDetailsSecurityServiceImpl
EgovUserDetailsSessionServiceImpl
시큐리티 인경우는 VO가
Spring security를 기반으로
전자정부표준프레임워크에서 확장하여 사용하고 있는데
IP를 가지고 있지 않습니다.
따라서 항상 공백을 리턴하게 되었던 것입니다.
감사합니다.