사용자 정보 조회 및 로그인 처리 시, 지방문화원코드 포함 처리
This commit is contained in:
parent
9f5ad43cb2
commit
f74297334e
@ -23,19 +23,10 @@ public class OAuthLogin {
|
|||||||
|
|
||||||
|
|
||||||
public OAuthLogin(OAuthVO oauthVO) {
|
public OAuthLogin(OAuthVO oauthVO) {
|
||||||
this(oauthVO, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public OAuthLogin(OAuthVO oauthVO, String councilJsessionId) {
|
|
||||||
|
|
||||||
// CallBack 호출될 경우, 지방문화원 원세션ID를 다시 전달받을 수 있도록 포함 처리 (2021.08.23 KKN)
|
|
||||||
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
|
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
|
||||||
.apiSecret(oauthVO.getClientSecret())
|
.apiSecret(oauthVO.getClientSecret())
|
||||||
.callback(
|
.callback(oauthVO.getRedirectUrl())
|
||||||
StringUtil.isEmpty(councilJsessionId) ?
|
|
||||||
oauthVO.getRedirectUrl() :
|
|
||||||
appendUrlParam(oauthVO.getRedirectUrl(), LoginService.COUNCIL_JSESSION_ID_NAME, councilJsessionId)
|
|
||||||
)
|
|
||||||
.scope("profile")
|
.scope("profile")
|
||||||
.build(oauthVO.getApi20Instance());
|
.build(oauthVO.getApi20Instance());
|
||||||
|
|
||||||
|
|||||||
@ -52,12 +52,12 @@ public class SecUserDetailsService implements UserDetailsService {
|
|||||||
* @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
|
* @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public UserDetails loadUserByUsername(String loginUserId) throws UsernameNotFoundException {
|
public UserDetails loadUserByUsername(String councilloginUserId) throws UsernameNotFoundException {
|
||||||
|
|
||||||
SecUserVO secUserVO = secUserDAO.loadUserByUsername(loginUserId);
|
SecUserVO secUserVO = secUserDAO.loadUserByUsername(councilloginUserId);
|
||||||
|
|
||||||
if(secUserVO == null) {
|
if(secUserVO == null) {
|
||||||
throw new UsernameNotFoundException(loginUserId);
|
throw new UsernameNotFoundException(councilloginUserId);
|
||||||
}
|
}
|
||||||
return secUserVO;
|
return secUserVO;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -76,7 +76,8 @@ public class SecUserVO extends NlibLoginVO implements UserDetails {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getUsername() {
|
public String getUsername() {
|
||||||
return super.getLoginUserId();
|
// 로그인하는 지방문화원 코드 + 로그인사용자ID
|
||||||
|
return super.getUsername();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 계정이 만료되지 않았는 지 여부를 리턴한다. (true: 만료안됨)
|
/* 계정이 만료되지 않았는 지 여부를 리턴한다. (true: 만료안됨)
|
||||||
|
|||||||
@ -14,8 +14,6 @@ import nlib.restful.service.DataApiResVO;
|
|||||||
|
|
||||||
public interface LoginService
|
public interface LoginService
|
||||||
{
|
{
|
||||||
public final String COUNCIL_JSESSION_ID_NAME = "councilJsessionId"; /* 지방문화원 회원 세션ID 저장변수명 */
|
|
||||||
|
|
||||||
//-------------------------------
|
//-------------------------------
|
||||||
// 로그인 오류코드
|
// 로그인 오류코드
|
||||||
//-------------------------------
|
//-------------------------------
|
||||||
@ -28,9 +26,9 @@ public interface LoginService
|
|||||||
|
|
||||||
public String login(HttpServletRequest req, String username, String password);
|
public String login(HttpServletRequest req, String username, String password);
|
||||||
|
|
||||||
public String loginOauth(HttpServletRequest req, String oauthServiceName, String snsId, String councilJsessionId);
|
public String loginOauth(HttpServletRequest req, String oauthServiceName, String snsId, String joinCouncilCd, String councilJsessionId);
|
||||||
|
|
||||||
public String loginCouncilSSO(HttpServletRequest req, String councilJsessionId);
|
public String loginCouncilSSO(HttpServletRequest req, String joinCouncilCd, String councilJsessionId);
|
||||||
|
|
||||||
public DataApiResVO logout(DataApiReqVO reqVO);
|
public DataApiResVO logout(DataApiReqVO reqVO);
|
||||||
|
|
||||||
|
|||||||
@ -98,6 +98,17 @@ public class NlibLoginVO implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 지방문화원코드+계정의 이름을 리턴한다. (사용자ID:email형식의 LOGIN_USER_ID 정보)
|
||||||
|
* Spring Security 처리 용
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see org.springframework.security.core.userdetails.UserDetails#getUsername()
|
||||||
|
*/
|
||||||
|
public String getUsername() {
|
||||||
|
// 로그인하는 지방문화원 코드 + 로그인사용자ID
|
||||||
|
return StringUtil.getString(getJoinCouncilCd(), "") + "@" + getLoginUserId();
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
// SETTER.GETTER
|
// SETTER.GETTER
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|||||||
@ -73,7 +73,7 @@ public class LoginServiceImpl implements LoginService
|
|||||||
* - ERR_CODE_REQ_SNSLOGIN : SNS 정상적인 로그인이 필요
|
* - ERR_CODE_REQ_SNSLOGIN : SNS 정상적인 로그인이 필요
|
||||||
* - ERR_CODE_REQ_MEMBERSHIP : 신규회원가입/회원통합 필요
|
* - ERR_CODE_REQ_MEMBERSHIP : 신규회원가입/회원통합 필요
|
||||||
*/
|
*/
|
||||||
public String loginOauth(HttpServletRequest req, String oauthServiceName, String snsId, String councilJsessionId) {
|
public String loginOauth(HttpServletRequest req, String oauthServiceName, String snsId, String joinCouncilCd, String councilJsessionId) {
|
||||||
|
|
||||||
if(StringUtil.isEmpty(snsId)) return ERR_CODE_REQ_SNSLOGIN;
|
if(StringUtil.isEmpty(snsId)) return ERR_CODE_REQ_SNSLOGIN;
|
||||||
|
|
||||||
@ -81,6 +81,7 @@ public class LoginServiceImpl implements LoginService
|
|||||||
NlibLoginVO nLoginParamVO = new NlibLoginVO();
|
NlibLoginVO nLoginParamVO = new NlibLoginVO();
|
||||||
nLoginParamVO.setSnsId(snsId);
|
nLoginParamVO.setSnsId(snsId);
|
||||||
nLoginParamVO.setSnsType(oauthServiceName);
|
nLoginParamVO.setSnsType(oauthServiceName);
|
||||||
|
nLoginParamVO.setJoinCouncilCd(joinCouncilCd);
|
||||||
NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO);
|
NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO);
|
||||||
|
|
||||||
if(nLoginVO == null) {
|
if(nLoginVO == null) {
|
||||||
@ -101,7 +102,7 @@ public class LoginServiceImpl implements LoginService
|
|||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
* @see nlib.user.service.LoginService#loginCouncilSSO(javax.servlet.http.HttpServletRequest, java.lang.String)
|
* @see nlib.user.service.LoginService#loginCouncilSSO(javax.servlet.http.HttpServletRequest, java.lang.String)
|
||||||
*/
|
*/
|
||||||
public String loginCouncilSSO(HttpServletRequest req, String councilJsessionId) {
|
public String loginCouncilSSO(HttpServletRequest req, String joinCouncilCd, String councilJsessionId) {
|
||||||
|
|
||||||
// 세션에서 로그인 처리 가능 정보 가져오기
|
// 세션에서 로그인 처리 가능 정보 가져오기
|
||||||
String loginInfo[] = SessionConfig.getLoginInfo(councilJsessionId);
|
String loginInfo[] = SessionConfig.getLoginInfo(councilJsessionId);
|
||||||
@ -119,7 +120,7 @@ public class LoginServiceImpl implements LoginService
|
|||||||
NlibLoginVO nLoginParamVO = new NlibLoginVO();
|
NlibLoginVO nLoginParamVO = new NlibLoginVO();
|
||||||
nLoginParamVO.setSnsId(snsId);
|
nLoginParamVO.setSnsId(snsId);
|
||||||
nLoginParamVO.setSnsType(oauthServiceName);
|
nLoginParamVO.setSnsType(oauthServiceName);
|
||||||
|
nLoginParamVO.setJoinCouncilCd(joinCouncilCd);
|
||||||
NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO);
|
NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO);
|
||||||
|
|
||||||
if(nLoginVO == null) {
|
if(nLoginVO == null) {
|
||||||
@ -127,7 +128,7 @@ public class LoginServiceImpl implements LoginService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Spring Security 로그인처리위한 token 생성하여 로그인 처리
|
// Spring Security 로그인처리위한 token 생성하여 로그인 처리
|
||||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getLoginUserId(), nLoginVO.getPassword());
|
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getUsername(), nLoginVO.getPassword());
|
||||||
NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token);
|
NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token);
|
||||||
|
|
||||||
if(StringUtil.isNotEmpty(nlibLoginedVO.getError())) {
|
if(StringUtil.isNotEmpty(nlibLoginedVO.getError())) {
|
||||||
|
|||||||
@ -168,7 +168,7 @@ public class LoginController {
|
|||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
|
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
|
||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
String councilJsessionId = paramMap.get(LoginService.COUNCIL_JSESSION_ID_NAME);
|
String councilJsessionId = paramMap.get("councilJsessionId");
|
||||||
String councilDnsHost = paramMap.get("councilDnsHost");
|
String councilDnsHost = paramMap.get("councilDnsHost");
|
||||||
String councilReturnUrl = StringUtil.decodeBase64(paramMap.get("councilReturnUrl"));
|
String councilReturnUrl = StringUtil.decodeBase64(paramMap.get("councilReturnUrl"));
|
||||||
String councilHomeUrl = StringUtil.decodeBase64(paramMap.get("councilHomeUrl"));
|
String councilHomeUrl = StringUtil.decodeBase64(paramMap.get("councilHomeUrl"));
|
||||||
@ -182,7 +182,7 @@ public class LoginController {
|
|||||||
log.debug("loginForm > councilCd = " + councilCd);
|
log.debug("loginForm > councilCd = " + councilCd);
|
||||||
log.debug("loginForm > councilNm = " + councilNm);
|
log.debug("loginForm > councilNm = " + councilNm);
|
||||||
|
|
||||||
session.setAttribute(LoginService.COUNCIL_JSESSION_ID_NAME, councilJsessionId);
|
session.setAttribute("councilJsessionId", councilJsessionId);
|
||||||
session.setAttribute("councilDnsHost", councilDnsHost);
|
session.setAttribute("councilDnsHost", councilDnsHost);
|
||||||
session.setAttribute("councilReturnUrl", councilReturnUrl);
|
session.setAttribute("councilReturnUrl", councilReturnUrl);
|
||||||
session.setAttribute("councilHomeUrl" , councilHomeUrl);
|
session.setAttribute("councilHomeUrl" , councilHomeUrl);
|
||||||
@ -192,15 +192,15 @@ public class LoginController {
|
|||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
// SNS 연동 URL 생성
|
// SNS 연동 URL 생성
|
||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, councilJsessionId);
|
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO);
|
||||||
log.debug("naverLogin.getOAuthURL() = "+naverLogin.getOAuthURL());
|
log.debug("naverLogin.getOAuthURL() = "+naverLogin.getOAuthURL());
|
||||||
model.addAttribute("naverUrl", naverLogin.getOAuthURL());
|
model.addAttribute("naverUrl", naverLogin.getOAuthURL());
|
||||||
|
|
||||||
OAuthLogin googleLogin = new OAuthLogin(googleAuthVO, councilJsessionId);
|
OAuthLogin googleLogin = new OAuthLogin(googleAuthVO);
|
||||||
log.debug("googleLogin.getOAuthURL() = "+googleLogin.getOAuthURL());
|
log.debug("googleLogin.getOAuthURL() = "+googleLogin.getOAuthURL());
|
||||||
model.addAttribute("googleUrl", googleLogin.getOAuthURL());
|
model.addAttribute("googleUrl", googleLogin.getOAuthURL());
|
||||||
|
|
||||||
OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO, councilJsessionId);
|
OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO);
|
||||||
log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL());
|
log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL());
|
||||||
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
|
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
|
||||||
|
|
||||||
@ -227,22 +227,22 @@ public class LoginController {
|
|||||||
public String loginOauthCallback(
|
public String loginOauthCallback(
|
||||||
HttpServletRequest req,
|
HttpServletRequest req,
|
||||||
@PathVariable String oauthServiceName,
|
@PathVariable String oauthServiceName,
|
||||||
@RequestParam Map<String, String> paramMap,
|
@RequestParam(required = false) String code,
|
||||||
Model model,
|
Model model,
|
||||||
HttpSession session) throws Exception {
|
HttpSession session) throws Exception {
|
||||||
|
|
||||||
String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do";
|
String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do";
|
||||||
String code = paramMap.get("code");
|
String councilJsessionId = (String)session.getAttribute("councilJsessionId");
|
||||||
String councilJsessionId = paramMap.get(LoginService.COUNCIL_JSESSION_ID_NAME);
|
String councilCd = (String)session.getAttribute("councilCd");
|
||||||
|
|
||||||
log.debug("oauthLoginCallback: code = ", code);
|
log.debug("oauthLoginCallback: code = ", code);
|
||||||
|
|
||||||
// SNS 클라이언트 설정 정보 할당
|
// SNS 클라이언트 설정 정보 할당
|
||||||
OAuthVO oauthVO = null;
|
OAuthVO oauthVO = null;
|
||||||
if (StringUtil.equalsIgnoreCase(OAuthConfig.GOOGLE_SERVICE_NAME, oauthServiceName))
|
if (StringUtil.equalsIgnoreCase(OAuthConfig.NAVER_SERVICE_NAME, oauthServiceName))
|
||||||
oauthVO = googleAuthVO;
|
|
||||||
else if (StringUtil.equalsIgnoreCase(OAuthConfig.NAVER_SERVICE_NAME, oauthServiceName))
|
|
||||||
oauthVO = naverAuthVO;
|
oauthVO = naverAuthVO;
|
||||||
|
else if (StringUtil.equalsIgnoreCase(OAuthConfig.GOOGLE_SERVICE_NAME, oauthServiceName))
|
||||||
|
oauthVO = googleAuthVO;
|
||||||
else if (StringUtil.equalsIgnoreCase(OAuthConfig.KAKAO_SERVICE_NAME, oauthServiceName))
|
else if (StringUtil.equalsIgnoreCase(OAuthConfig.KAKAO_SERVICE_NAME, oauthServiceName))
|
||||||
oauthVO = kakaoAuthVO;
|
oauthVO = kakaoAuthVO;
|
||||||
else {
|
else {
|
||||||
@ -253,7 +253,7 @@ public class LoginController {
|
|||||||
// 1. code를 이용해서 Access Token 받기
|
// 1. code를 이용해서 Access Token 받기
|
||||||
// 2. Access Token을 이용해서 사용자 제공정보 가져오기
|
// 2. Access Token을 이용해서 사용자 제공정보 가져오기
|
||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
OAuthLogin oauthLogin = new OAuthLogin(oauthVO, councilJsessionId);
|
OAuthLogin oauthLogin = new OAuthLogin(oauthVO);
|
||||||
OAuthUniversalUser oauthUser = oauthLogin.getUserProfile(code); // 1,2번 동시
|
OAuthUniversalUser oauthUser = oauthLogin.getUserProfile(code); // 1,2번 동시
|
||||||
log.debug("oauthLoginCallback > Profile ===>>" + oauthUser.getSnsId() + ", " + oauthUser.getName());
|
log.debug("oauthLoginCallback > Profile ===>>" + oauthUser.getSnsId() + ", " + oauthUser.getName());
|
||||||
|
|
||||||
@ -267,7 +267,7 @@ public class LoginController {
|
|||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
// 등록된 사용자 여부 확인
|
// 등록된 사용자 여부 확인
|
||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
String loginResult = loginService.loginOauth(req, oauthServiceName, oauthUser.getSnsId(), councilJsessionId);
|
String loginResult = loginService.loginOauth(req, oauthServiceName, oauthUser.getSnsId(), councilCd, councilJsessionId);
|
||||||
|
|
||||||
// 정상 SNS 연동 로그인
|
// 정상 SNS 연동 로그인
|
||||||
if(loginResult == null) {
|
if(loginResult == null) {
|
||||||
@ -348,7 +348,8 @@ public class LoginController {
|
|||||||
String redirectUrl = "/index.do";
|
String redirectUrl = "/index.do";
|
||||||
|
|
||||||
String jsessionId = session.getId();
|
String jsessionId = session.getId();
|
||||||
String loginResult = loginService.loginCouncilSSO(req, session.getId());
|
String councilCd = (String)session.getAttribute("councilCd");
|
||||||
|
String loginResult = loginService.loginCouncilSSO(req, councilCd, jsessionId);
|
||||||
|
|
||||||
// oAuth를 통한 SNS연동 성공인 경우
|
// oAuth를 통한 SNS연동 성공인 경우
|
||||||
if(loginResult == null) {
|
if(loginResult == null) {
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
<mapper namespace="LoginDAO">
|
<mapper namespace="LoginDAO">
|
||||||
|
|
||||||
<select id="selectLoginUserInfo" parameterType="NlibLoginVO" resultType="NlibLoginVO">
|
<select id="selectLoginUserInfo" parameterType="NlibLoginVO" resultType="NlibLoginVO">
|
||||||
|
<![CDATA[
|
||||||
SELECT
|
SELECT
|
||||||
A.MB_INFO_ID
|
A.MB_INFO_ID
|
||||||
, A.LOGIN_USER_ID
|
, A.LOGIN_USER_ID
|
||||||
@ -28,13 +29,17 @@
|
|||||||
, B.SNS_TYPE
|
, B.SNS_TYPE
|
||||||
, B.SNS_ID
|
, B.SNS_ID
|
||||||
, 'ROLE_USER' AS AUTHORITY_LIST
|
, 'ROLE_USER' AS AUTHORITY_LIST
|
||||||
|
, C.JOIN_COUNCIL_CD
|
||||||
FROM UAC_CLTR_DB.MB_INFO A /* 사용자정보 */
|
FROM UAC_CLTR_DB.MB_INFO A /* 사용자정보 */
|
||||||
JOIN UAC_CLTR_DB.MB_SNS B /* 사용자 SNS 정보 */
|
JOIN UAC_CLTR_DB.MB_SNS B /* 사용자 SNS 정보 */
|
||||||
ON A.MB_INFO_ID = B.MB_INFO_ID
|
ON A.MB_INFO_ID = B.MB_INFO_ID
|
||||||
|
LEFT OUTER JOIN UAC_CLTR_DB.MB_SITE /* 가입문화원정보 */ C
|
||||||
|
ON A.MB_INFO_ID = C.MB_INFO_ID AND C.JOIN_COUNCIL_CD = #{joinCouncilCd}
|
||||||
WHERE B.SNS_ID = #{snsId}
|
WHERE B.SNS_ID = #{snsId}
|
||||||
AND UPPER(SNS_TYPE) = UPPER(#{snsType})
|
AND UPPER(SNS_TYPE) = UPPER(#{snsType})
|
||||||
AND B.UNLINK_DD IS NULL /* 연동해제건 제외 */
|
AND B.UNLINK_DD IS NULL /* 연동해제건 제외 */
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
|
]]>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectCouncilInfoByDnsHost" parameterType="String" resultType="HashMap">
|
<select id="selectCouncilInfoByDnsHost" parameterType="String" resultType="HashMap">
|
||||||
|
|||||||
@ -31,7 +31,9 @@
|
|||||||
FROM UAC_CLTR_DB.MB_INFO A /* 사용자정보 */
|
FROM UAC_CLTR_DB.MB_INFO A /* 사용자정보 */
|
||||||
JOIN UAC_CLTR_DB.MB_SNS B /* 사용자 SNS 정보 */
|
JOIN UAC_CLTR_DB.MB_SNS B /* 사용자 SNS 정보 */
|
||||||
ON A.MB_INFO_ID = B.MB_INFO_ID
|
ON A.MB_INFO_ID = B.MB_INFO_ID
|
||||||
WHERE A.LOGIN_USER_ID = #{loginUserId}
|
JOIN UAC_CLTR_DB.MB_SITE /* 가입문화원정보 */ C
|
||||||
|
ON A.MB_INFO_ID = C.MB_INFO_ID
|
||||||
|
WHERE CONCAT(C.JOIN_COUNCIL_CD, '@', A.LOGIN_USER_ID) = #{councilloginUserId}
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user