전자정부표준프레임워크에서 스프링 시큐리티가 적용되어 있을 때 로그인한 사용자의 정보를 얻기 위해서는 다음과 같이 사용합니다.
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로 부터 추가된 정보를 얻을 수 있습니다.
스프링 시큐리티에서 중복 로그인 방지 및 세션 고정 공격 방지
전자정부표준프레임워크 Spring Security 사용시 로그인한 사용자정보에 추가정보 넣기
Srping Security 권한 직접 체크하기(시큐리티 태그와 인증 클래스)
CKEditor 이미지 업로드에 Spring Security CSRF 토큰 적용하기
전자정부표준프레임워크 Spring Security 설정 간소화에서 CSRF 설정하기
스프링프레임웍 - Spring Security(3) : 사용자/권한 정보 DB사용하기
'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글
스프링 시큐리티에서 중복 로그인 방지 및 세션 고정 공격 방지 (2) | 2018.04.20 |
---|---|
스프링프레임웍 다국어 메세지 프로퍼티 파일에 한글 바로쓰기 (0) | 2018.04.20 |
전자정부표준프레임워크 Controller에 AOP 적용하기 (0) | 2018.04.20 |
CKEditor 한글 파일명 이미지 업로드 에러(Spring Framework) (0) | 2018.04.20 |
Srping Security 권한 직접 체크하기(시큐리티 태그와 인증 클래스) (0) | 2018.04.20 |