본문 바로가기

Tip

[spring-security] LoginVO에 변수 추가

전자정부표준프레임워크에서 스프링 시큐리티가 적용되어 있을 때 로그인한 사용자의 정보를 얻기 위해서는 다음과 같이 사용합니다.

 

import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;

import egovframework.com.cmm.LoginVO; ...

// 로그인 여부 확인

Boolean isLogin = EgovUserDetailsHelper.isAuthenticated();

// 로그인한 사용자 정보

LoginVO user = null; if(isLogin) { user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); }

 

로그인 후 세션에 저장되어 있던 LoginVO를 얻었다면 필요한 곳에 사용할 수 있습니다. 이 세션에 저장되는 정보에 추가적으로 다른 정보를 넣을 필요가 있을 경우도 있습니다. 이때 어떻게 처리하는지 알아 보겠습니다.

 

 

1. LoginVO 가 추가 정보를 저장할 수 있도록 멤버 변수를 추가하고, getter/setter도 추가합니다.

 

 

2. 전자정부표준프레임워크 Spring Security 간소화 설정에서 로그인한 사용자의 정보를 가져오는 곳은 context-security.xml 파일에 있습니다.

 

<egov-security:config id="securityConfig" loginUrl="/uat/uia/actionSecurityLogin.do" logoutSuccessUrl="/uat/uia/actionMain.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 FROM COMVNUSERMASTER WHERE CONCAT(USER_SE, USER_ID) = ?" jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY FROM LETTNEMPLYRSCRTYESTBS A, 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" />

 

여기에서 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 FROM COMVNUSERMASTER WHERE CONCAT(USER_SE, USER_ID) = ?

 

3. 다음은 쿼리에서 가져온 정보를 LoginVO의 멤버변수에 맵핑하는 부분을 수정합니다.

 

이 기능을 수행하는 곳은 jdbcMapClass 속성에 지정되어있는 egovframework.let.uat.uia.service.impl.EgovSessionMapping 클래스 입니다. 이 클래스의 mapRow() 메소드에 필요한 정보를 ResultSet 으로부터 추출해서 LoginVO 에 저장하는 코드를 추가합니다.

 

@Override protected EgovUserDetails mapRow(ResultSet rs, int rownum) throws SQLException { String strUserId = rs.getString("user_id"); String strPassWord = rs.getString("password"); boolean strEnabled = rs.getBoolean("enabled"); ... String strUserNm = rs.getString("user_nm"); String strUserSe = rs.getString("user_se"); ... // 세션 항목 설정 LoginVO loginVO = new LoginVO(); loginVO.setId(strUserId); loginVO.setPassword(strPassWord); ... loginVO.setName(strUserNm); loginVO.setUserSe(strUserSe); ... return new EgovUserDetails(strUserId, strPassWord, strEnabled, loginVO); }

 

이제 세션에 저장된 LoginVO로 부터 추가된 정보를 얻을 수 있습니다.


감사합니다.
출처: https://offbyone.tistory.com/221 [쉬고 싶은 개발자]