스프링시큐리티 관련 질문드립니다.중복호출건에 대해
- 작성자 :
- 개*자
- 작성일 :
- 2019-05-14 17:03:55
- 조회수 :
- 2,675
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
context-security.xml
<egov-security:config id="securityConfig"
loginUrl="/uat/uia/actionSecurityLogin.do"
logoutSuccessUrl="/uat/uia/egovLoginUsr.do"
loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
accessDeniedUrl="/sec/ram/accessDenied.do"
dataSource="dataSource"
jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL, USER_SE, '-' ORGNZT_ID, ESNTL_ID, '-' ORGNZT_NM, PSTINST_CODE, PSTINST_CODE_NM FROM NKIS.COMVNUSERMASTER WHERE USER_ID = ?"
jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY FROM NKIS.COMTNEMPLYRSCRTYESTBS A, NKIS.COMVNUSERMASTER B WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
jdbcMapClass="egovframework.let.uat.uia.service.impl.EgovSessionMapping"
requestMatcherType="regex" hash="plaintext" />
EgovLoginController.java
if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn)
{
생략~
springSecurity.setContinueChainBeforeSuccessfulAuthentication(false); // false 이면 chain 처리 되지 않음.. (filter가 아닌 경우 false로...)
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getId(), resultVO.getUniqId()), response, null);
LoginVO user = EgovUserDetailsHelper.isAuthenticated() ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() : null;
return "forward:/uat/uia/actionMain.do"; // 성공 시 페이지.. (redirect 불가)
}
else
{
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsr";
}
이렇게 로그인 인증후 /uat/uia/actionMain.do 여기로 호출이 되는데요 여기 URL이 두번 호출이 됩니다.
자바단에서 actionMain.do를 잘못된URL로 변경하면 /uat/uia/actionMain.do은 한번만 호출이 되는데요~
defaul-target-url도 지정하지 않았는데 원인을 찾질 못하겠어요~
답변 부탁드립니다.
<egov-security:config id="securityConfig"
loginUrl="/uat/uia/actionSecurityLogin.do"
logoutSuccessUrl="/uat/uia/egovLoginUsr.do"
loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
accessDeniedUrl="/sec/ram/accessDenied.do"
dataSource="dataSource"
jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL, USER_SE, '-' ORGNZT_ID, ESNTL_ID, '-' ORGNZT_NM, PSTINST_CODE, PSTINST_CODE_NM FROM NKIS.COMVNUSERMASTER WHERE USER_ID = ?"
jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY FROM NKIS.COMTNEMPLYRSCRTYESTBS A, NKIS.COMVNUSERMASTER B WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
jdbcMapClass="egovframework.let.uat.uia.service.impl.EgovSessionMapping"
requestMatcherType="regex" hash="plaintext" />
EgovLoginController.java
if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn)
{
생략~
springSecurity.setContinueChainBeforeSuccessfulAuthentication(false); // false 이면 chain 처리 되지 않음.. (filter가 아닌 경우 false로...)
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getId(), resultVO.getUniqId()), response, null);
LoginVO user = EgovUserDetailsHelper.isAuthenticated() ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() : null;
return "forward:/uat/uia/actionMain.do"; // 성공 시 페이지.. (redirect 불가)
}
else
{
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsr";
}
이렇게 로그인 인증후 /uat/uia/actionMain.do 여기로 호출이 되는데요 여기 URL이 두번 호출이 됩니다.
자바단에서 actionMain.do를 잘못된URL로 변경하면 /uat/uia/actionMain.do은 한번만 호출이 되는데요~
defaul-target-url도 지정하지 않았는데 원인을 찾질 못하겠어요~
답변 부탁드립니다.
A
안녕하세요.
표준프레임워크센터 입니다.
EgovLoginController.java내에서
springSecurity관련 객체가 핸들링되고 있는데
해당 부분에 있으면 않될듯 합니다.
관련 부분을 다시 한번 검토하셔야 할듯 합니다.
전자정부 시큐리티 간소화 서비스는
필터를 기반으로 동작하고
버전이 명시되어 있지 않아
공통컴포넌트 V3.8로 예시를 들어드리면요.
다음 파일에 필터가 적용되어 있습니다.
src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java
다음 필터 선언코드가 확인가능하오니
확인하시기 바랍니다.
FilterRegistration.Dynamic egovSpringSecurityLoginFilter = servletContext.addFilter("egovSpringSecurityLoginFilter", new EgovSpringSecurityLoginFilter());
시큐리티 모드에서는 다음클래스파일에서
로그인을 처리합니다.
src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLoginFilter.java
감사합니다.
표준프레임워크센터 입니다.
EgovLoginController.java내에서
springSecurity관련 객체가 핸들링되고 있는데
해당 부분에 있으면 않될듯 합니다.
관련 부분을 다시 한번 검토하셔야 할듯 합니다.
전자정부 시큐리티 간소화 서비스는
필터를 기반으로 동작하고
버전이 명시되어 있지 않아
공통컴포넌트 V3.8로 예시를 들어드리면요.
다음 파일에 필터가 적용되어 있습니다.
src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java
다음 필터 선언코드가 확인가능하오니
확인하시기 바랍니다.
FilterRegistration.Dynamic egovSpringSecurityLoginFilter = servletContext.addFilter("egovSpringSecurityLoginFilter", new EgovSpringSecurityLoginFilter());
시큐리티 모드에서는 다음클래스파일에서
로그인을 처리합니다.
src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLoginFilter.java
감사합니다.