사용자 정보 조회 및 로그인 처리 시, 지방문화원코드 포함 처리
This commit is contained in:
parent
9f5ad43cb2
commit
f74297334e
@ -23,19 +23,10 @@ public class OAuthLogin {
|
||||
|
||||
|
||||
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())
|
||||
.apiSecret(oauthVO.getClientSecret())
|
||||
.callback(
|
||||
StringUtil.isEmpty(councilJsessionId) ?
|
||||
oauthVO.getRedirectUrl() :
|
||||
appendUrlParam(oauthVO.getRedirectUrl(), LoginService.COUNCIL_JSESSION_ID_NAME, councilJsessionId)
|
||||
)
|
||||
.callback(oauthVO.getRedirectUrl())
|
||||
.scope("profile")
|
||||
.build(oauthVO.getApi20Instance());
|
||||
|
||||
|
||||
@ -52,12 +52,12 @@ public class SecUserDetailsService implements UserDetailsService {
|
||||
* @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
|
||||
*/
|
||||
@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) {
|
||||
throw new UsernameNotFoundException(loginUserId);
|
||||
throw new UsernameNotFoundException(councilloginUserId);
|
||||
}
|
||||
return secUserVO;
|
||||
}
|
||||
|
||||
@ -76,7 +76,8 @@ public class SecUserVO extends NlibLoginVO implements UserDetails {
|
||||
*/
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return super.getLoginUserId();
|
||||
// 로그인하는 지방문화원 코드 + 로그인사용자ID
|
||||
return super.getUsername();
|
||||
}
|
||||
|
||||
/* 계정이 만료되지 않았는 지 여부를 리턴한다. (true: 만료안됨)
|
||||
|
||||
@ -14,8 +14,6 @@ import nlib.restful.service.DataApiResVO;
|
||||
|
||||
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 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);
|
||||
|
||||
|
||||
@ -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
|
||||
//----------------------------------------------------------------
|
||||
|
||||
@ -73,7 +73,7 @@ public class LoginServiceImpl implements LoginService
|
||||
* - ERR_CODE_REQ_SNSLOGIN : SNS 정상적인 로그인이 필요
|
||||
* - 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;
|
||||
|
||||
@ -81,6 +81,7 @@ public class LoginServiceImpl implements LoginService
|
||||
NlibLoginVO nLoginParamVO = new NlibLoginVO();
|
||||
nLoginParamVO.setSnsId(snsId);
|
||||
nLoginParamVO.setSnsType(oauthServiceName);
|
||||
nLoginParamVO.setJoinCouncilCd(joinCouncilCd);
|
||||
NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO);
|
||||
|
||||
if(nLoginVO == null) {
|
||||
@ -101,7 +102,7 @@ public class LoginServiceImpl implements LoginService
|
||||
* (non-Javadoc)
|
||||
* @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);
|
||||
@ -119,7 +120,7 @@ public class LoginServiceImpl implements LoginService
|
||||
NlibLoginVO nLoginParamVO = new NlibLoginVO();
|
||||
nLoginParamVO.setSnsId(snsId);
|
||||
nLoginParamVO.setSnsType(oauthServiceName);
|
||||
|
||||
nLoginParamVO.setJoinCouncilCd(joinCouncilCd);
|
||||
NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO);
|
||||
|
||||
if(nLoginVO == null) {
|
||||
@ -127,7 +128,7 @@ public class LoginServiceImpl implements LoginService
|
||||
}
|
||||
|
||||
// Spring Security 로그인처리위한 token 생성하여 로그인 처리
|
||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getLoginUserId(), nLoginVO.getPassword());
|
||||
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(nLoginVO.getUsername(), nLoginVO.getPassword());
|
||||
NlibLoginVO nlibLoginedVO = loginProcSecurity(req, token);
|
||||
|
||||
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 councilReturnUrl = StringUtil.decodeBase64(paramMap.get("councilReturnUrl"));
|
||||
String councilHomeUrl = StringUtil.decodeBase64(paramMap.get("councilHomeUrl"));
|
||||
@ -182,7 +182,7 @@ public class LoginController {
|
||||
log.debug("loginForm > councilCd = " + councilCd);
|
||||
log.debug("loginForm > councilNm = " + councilNm);
|
||||
|
||||
session.setAttribute(LoginService.COUNCIL_JSESSION_ID_NAME, councilJsessionId);
|
||||
session.setAttribute("councilJsessionId", councilJsessionId);
|
||||
session.setAttribute("councilDnsHost", councilDnsHost);
|
||||
session.setAttribute("councilReturnUrl", councilReturnUrl);
|
||||
session.setAttribute("councilHomeUrl" , councilHomeUrl);
|
||||
@ -192,15 +192,15 @@ public class LoginController {
|
||||
//----------------------------------------------
|
||||
// SNS 연동 URL 생성
|
||||
//----------------------------------------------
|
||||
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, councilJsessionId);
|
||||
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO);
|
||||
log.debug("naverLogin.getOAuthURL() = "+naverLogin.getOAuthURL());
|
||||
model.addAttribute("naverUrl", naverLogin.getOAuthURL());
|
||||
|
||||
OAuthLogin googleLogin = new OAuthLogin(googleAuthVO, councilJsessionId);
|
||||
OAuthLogin googleLogin = new OAuthLogin(googleAuthVO);
|
||||
log.debug("googleLogin.getOAuthURL() = "+googleLogin.getOAuthURL());
|
||||
model.addAttribute("googleUrl", googleLogin.getOAuthURL());
|
||||
|
||||
OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO, councilJsessionId);
|
||||
OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO);
|
||||
log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL());
|
||||
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
|
||||
|
||||
@ -227,22 +227,22 @@ public class LoginController {
|
||||
public String loginOauthCallback(
|
||||
HttpServletRequest req,
|
||||
@PathVariable String oauthServiceName,
|
||||
@RequestParam Map<String, String> paramMap,
|
||||
@RequestParam(required = false) String code,
|
||||
Model model,
|
||||
HttpSession session) throws Exception {
|
||||
|
||||
String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do";
|
||||
String code = paramMap.get("code");
|
||||
String councilJsessionId = paramMap.get(LoginService.COUNCIL_JSESSION_ID_NAME);
|
||||
String councilJsessionId = (String)session.getAttribute("councilJsessionId");
|
||||
String councilCd = (String)session.getAttribute("councilCd");
|
||||
|
||||
log.debug("oauthLoginCallback: code = ", code);
|
||||
|
||||
// SNS 클라이언트 설정 정보 할당
|
||||
OAuthVO oauthVO = null;
|
||||
if (StringUtil.equalsIgnoreCase(OAuthConfig.GOOGLE_SERVICE_NAME, oauthServiceName))
|
||||
oauthVO = googleAuthVO;
|
||||
else if (StringUtil.equalsIgnoreCase(OAuthConfig.NAVER_SERVICE_NAME, oauthServiceName))
|
||||
if (StringUtil.equalsIgnoreCase(OAuthConfig.NAVER_SERVICE_NAME, oauthServiceName))
|
||||
oauthVO = naverAuthVO;
|
||||
else if (StringUtil.equalsIgnoreCase(OAuthConfig.GOOGLE_SERVICE_NAME, oauthServiceName))
|
||||
oauthVO = googleAuthVO;
|
||||
else if (StringUtil.equalsIgnoreCase(OAuthConfig.KAKAO_SERVICE_NAME, oauthServiceName))
|
||||
oauthVO = kakaoAuthVO;
|
||||
else {
|
||||
@ -253,7 +253,7 @@ public class LoginController {
|
||||
// 1. code를 이용해서 Access Token 받기
|
||||
// 2. Access Token을 이용해서 사용자 제공정보 가져오기
|
||||
//-----------------------------------------------
|
||||
OAuthLogin oauthLogin = new OAuthLogin(oauthVO, councilJsessionId);
|
||||
OAuthLogin oauthLogin = new OAuthLogin(oauthVO);
|
||||
OAuthUniversalUser oauthUser = oauthLogin.getUserProfile(code); // 1,2번 동시
|
||||
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 연동 로그인
|
||||
if(loginResult == null) {
|
||||
@ -348,7 +348,8 @@ public class LoginController {
|
||||
String redirectUrl = "/index.do";
|
||||
|
||||
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연동 성공인 경우
|
||||
if(loginResult == null) {
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
<mapper namespace="LoginDAO">
|
||||
|
||||
<select id="selectLoginUserInfo" parameterType="NlibLoginVO" resultType="NlibLoginVO">
|
||||
<![CDATA[
|
||||
SELECT
|
||||
A.MB_INFO_ID
|
||||
, A.LOGIN_USER_ID
|
||||
@ -28,13 +29,17 @@
|
||||
, B.SNS_TYPE
|
||||
, B.SNS_ID
|
||||
, 'ROLE_USER' AS AUTHORITY_LIST
|
||||
, C.JOIN_COUNCIL_CD
|
||||
FROM UAC_CLTR_DB.MB_INFO A /* 사용자정보 */
|
||||
JOIN UAC_CLTR_DB.MB_SNS B /* 사용자 SNS 정보 */
|
||||
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}
|
||||
AND UPPER(SNS_TYPE) = UPPER(#{snsType})
|
||||
AND B.UNLINK_DD IS NULL /* 연동해제건 제외 */
|
||||
LIMIT 1
|
||||
AND B.UNLINK_DD IS NULL /* 연동해제건 제외 */
|
||||
LIMIT 1
|
||||
]]>
|
||||
</select>
|
||||
|
||||
<select id="selectCouncilInfoByDnsHost" parameterType="String" resultType="HashMap">
|
||||
|
||||
@ -31,7 +31,9 @@
|
||||
FROM UAC_CLTR_DB.MB_INFO A /* 사용자정보 */
|
||||
JOIN UAC_CLTR_DB.MB_SNS B /* 사용자 SNS 정보 */
|
||||
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
|
||||
</select>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user