소스 충돌

This commit is contained in:
JSYOO 2021-08-31 16:25:10 +09:00
parent a7858f5d93
commit b891c1df23
2 changed files with 109 additions and 63 deletions

View File

@ -112,6 +112,7 @@ public class LoginController {
String councilReturnUrl = councilHomeUrl + (StringUtil.isEmpty(returnUrl) ? "/" : returnUrl);
String councilDnsHost = StringUtil.getHostName(url);
// 캐쉬된 요청URL인 존재하는 경우, 리턴URL로 설정
RequestCache cache = new HttpSessionRequestCache();
SavedRequest savedRequest = cache.getRequest(req, res);
if (savedRequest != null) {
@ -119,27 +120,19 @@ public class LoginController {
log.debug("loginCouncil > HttpSessionRequestCache에서 획득 councilReturnUrl = " + councilReturnUrl);
}
// returnUrl 정보 설정
// if(StringUtil.isEmpty(returnUrl)) {
// RequestCache cache = new HttpSessionRequestCache();
// SavedRequest savedRequest = cache.getRequest(req, res);
// if (savedRequest != null) {
// councilReturnUrl = savedRequest.getRedirectUrl();
// log.debug("loginCouncil > HttpSessionRequestCache에서 획득 councilReturnUrl = " + councilReturnUrl);
// }
// }
// 지방문화원 코드 확인
HashMap<String, String> councilInfo = loginService.selectCouncilInfoByDnsHost(councilDnsHost);
String councilCd = (councilInfo == null ? null : councilInfo.get("councilCd"));
String councilNm = (councilInfo == null ? null : councilInfo.get("councilNm"));
session.setAttribute("councilDnsHost", councilDnsHost);
session.setAttribute("councilReturnUrl", councilReturnUrl);
session.setAttribute("councilHomeUrl", councilHomeUrl);
session.setAttribute("councilDnsHost", councilDnsHost);
session.setAttribute("councilCd", councilCd);
session.setAttribute("councilNm", councilNm);
log.debug("loginCouncil > sessionid=" + session.getId());
log.debug("loginCouncil > REQ URL = " + url);
log.debug("loginCouncil > councilJsessionId = " + session.getId());
log.debug("loginCouncil > councilDnsHost = " + councilDnsHost);
@ -155,9 +148,59 @@ public class LoginController {
"&councilHomeUrl=" + StringUtil.encodeBase64(councilHomeUrl) +
"&councilReturnUrl=" + StringUtil.encodeBase64(councilReturnUrl);
return "redirect:" + NlibProperty.getString("nculture.login.redirect.url") + "?" + params;
return "redirect:" + NlibProperty.getString("nculture.login.preset.redirect.url") + "?" + params;
}
/**
* 로그인 콜백을 위한 설정을 처리한 , 로그인 페이지로 전환한다.
*
* @param req
* @param error
* @param logout
* @param model
* @return
*/
@RequestMapping("/login/loginPreSet.do")
public String loginPreSet(HttpServletRequest req,
@RequestParam(required = false) String error,
@RequestParam(required = false) String message,
@RequestParam(required = false) String logout,
RedirectAttributes redirectAttrs,
@RequestParam Map<String, String> paramMap,
Model model,
HttpSession session) {
//----------------------------------------------
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
//----------------------------------------------
String councilJsessionId = paramMap.get("councilJsessionId");
String councilDnsHost = paramMap.get("councilDnsHost");
String councilReturnUrl = StringUtil.decodeBase64(paramMap.get("councilReturnUrl"));
String councilHomeUrl = StringUtil.decodeBase64(paramMap.get("councilHomeUrl"));
String councilCd = paramMap.get("councilCd");
String councilNm = StringUtil.decodeBase64(paramMap.get("councilNm"));
log.debug("loginPreSet > sessionid=" + session.getId());
log.debug("loginPreSet > councilJsessionId = " + councilJsessionId);
log.debug("loginPreSet > councilDnsHost = " + councilDnsHost);
log.debug("loginPreSet > councilReturnUrl = " + councilReturnUrl);
log.debug("loginPreSet > councilHomeUrl = " + councilHomeUrl);
log.debug("loginPreSet > councilCd = " + councilCd);
log.debug("loginPreSet > councilNm = " + councilNm);
session.setAttribute("councilJsessionId", councilJsessionId);
session.setAttribute("councilReturnUrl", councilReturnUrl);
session.setAttribute("councilHomeUrl" , councilHomeUrl);
session.setAttribute("councilDnsHost", councilDnsHost);
session.setAttribute("councilCd" , councilCd);
session.setAttribute("councilNm" , councilNm);
String redirect = councilHomeUrl + NlibProperty.getString("nculture.login.redirect.uri");
return "redirect:" + redirect;
}
/**
* 로그인 정보 입력 화면을 출력한다.
*
@ -180,13 +223,14 @@ public class LoginController {
//----------------------------------------------
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
//----------------------------------------------
String councilJsessionId = paramMap.get("councilJsessionId");
String councilDnsHost = paramMap.get("councilDnsHost");
String councilReturnUrl = StringUtil.decodeBase64(paramMap.get("councilReturnUrl"));
String councilHomeUrl = StringUtil.decodeBase64(paramMap.get("councilHomeUrl"));
String councilCd = paramMap.get("councilCd");
String councilNm = StringUtil.decodeBase64(paramMap.get("councilNm"));
String councilJsessionId = (String)session.getAttribute("councilJsessionId");
String councilDnsHost = (String)session.getAttribute("councilDnsHost");
String councilReturnUrl = (String)session.getAttribute("councilReturnUrl");
String councilHomeUrl = (String)session.getAttribute("councilHomeUrl");
String councilCd = (String)session.getAttribute("councilCd");
String councilNm = (String)session.getAttribute("councilNm");
log.debug("loginForm > sessionid=" + session.getId());
log.debug("loginForm > councilJsessionId = " + councilJsessionId);
log.debug("loginForm > councilDnsHost = " + councilDnsHost);
log.debug("loginForm > councilReturnUrl = " + councilReturnUrl);
@ -194,25 +238,18 @@ public class LoginController {
log.debug("loginForm > councilCd = " + councilCd);
log.debug("loginForm > councilNm = " + councilNm);
session.setAttribute("councilJsessionId", councilJsessionId);
session.setAttribute("councilDnsHost", councilDnsHost);
session.setAttribute("councilReturnUrl", councilReturnUrl);
session.setAttribute("councilHomeUrl" , councilHomeUrl);
session.setAttribute("councilCd" , councilCd);
session.setAttribute("councilNm" , councilNm);
//----------------------------------------------
// SNS 연동 URL 생성
//----------------------------------------------
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO);
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
log.debug("naverLogin.getOAuthURL() = "+naverLogin.getOAuthURL());
model.addAttribute("naverUrl", naverLogin.getOAuthURL());
OAuthLogin googleLogin = new OAuthLogin(googleAuthVO);
OAuthLogin googleLogin = new OAuthLogin(googleAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
log.debug("googleLogin.getOAuthURL() = "+googleLogin.getOAuthURL());
model.addAttribute("googleUrl", googleLogin.getOAuthURL());
OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO);
OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL());
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
@ -235,14 +272,18 @@ public class LoginController {
* @return
* @throws Exception
*/
@RequestMapping(value = {"/login/{oauthServiceName}Callback.do", "/login/{oauthServiceName}/callback.do"})
@RequestMapping(value = {"/{callType}/{oauthServiceName}/callback.do"}) // /login/{oauthServiceName}/callback.do, /member/{oauthServiceName}/callback.do
public String loginOauthCallback(
HttpServletRequest req,
@PathVariable String callType,
@PathVariable String oauthServiceName,
@RequestParam(required = false) String code,
Model model,
HttpSession session) throws Exception {
log.debug("loginOauthCallback > sessionid=" + session.getId());
String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do";
String councilJsessionId = (String)session.getAttribute("councilJsessionId");
String councilCd = (String)session.getAttribute("councilCd");
@ -263,11 +304,11 @@ public class LoginController {
//-----------------------------------------------
// 1. code를 이용해서 Access Token 받기
// 2. Access Token을 이용해서 사용자 제공정보 가져오기
// 2. Access Token을 이용해서 사용자 제공 정보 가져오기
//-----------------------------------------------
OAuthLogin oauthLogin = new OAuthLogin(oauthVO);
OAuthLogin oauthLogin = new OAuthLogin(oauthVO, callType);
OAuthUniversalUser oauthUser = oauthLogin.getUserProfile(code); // 1,2번 동시
log.debug("oauthLoginCallback > Profile ===>>" + oauthUser.getSnsId() + ", " + oauthUser.getName());
log.debug("oauthLoginCallback > Profile ===>>" + oauthUser.getSnsId() + ", " + oauthUser.getSnsName());
// oAuth를 통한 SNS연동이 실패한 경우
if(oauthUser == null || !oauthUser.isValid()) {
@ -277,26 +318,17 @@ public class LoginController {
}
//-----------------------------------------------
// 등록된 사용자 여부 확인
// 해당 처리기로 전환
//-----------------------------------------------
String loginResult = loginService.loginOauth(req, oauthServiceName, oauthUser.getSnsId(), councilCd, councilJsessionId);
// 정상 SNS 연동 로그인
if(loginResult == null) {
// 세션에 설정된 redirect 주소 확인
String councilHomeUrl = (String)session.getAttribute("councilHomeUrl");
redirectUrl = councilHomeUrl + "/login/loginCouncilSSO.do";
return "redirect:" + redirectUrl;
}
// SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않은 사용자 : 회원가입으로 전환
model.addAttribute("error", loginResult);
if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_MEMBERSHIP)) {
model.addAttribute("message", "회원가입하신 후, 이용 가능합니다.");
redirectUrl = NlibProperty.getString("member.new.url");
} else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) {
model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다.");
redirectUrl = NlibProperty.getString("login.back.url");
if(OAuthLogin.CALL_TYPE_LOGIN.equalsIgnoreCase(callType)) {
// 로그인인 경우
SessionConfig.setLoginInfo(councilJsessionId, oauthUser);
redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.login.redirect.uri");
} else {
// 회원가입인 경우
SessionConfig.setNewMemberInfo(councilJsessionId, oauthUser);
redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.member.redirect.uri");
}
return "redirect:" + redirectUrl;
@ -361,22 +393,34 @@ public class LoginController {
String jsessionId = session.getId();
String councilCd = (String)session.getAttribute("councilCd");
String loginResult = loginService.loginCouncilSSO(req, councilCd, jsessionId);
String councilReturnUrl = (String)session.getAttribute("councilReturnUrl");
OAuthUniversalUser oauthUser = SessionConfig.popLoginInfo(jsessionId);
// oAuth를 통한 SNS연동 성공인 경우
if(oauthUser == null || !oauthUser.isValid()) {
throw new Exception("잘못된 접근입니다.");
}
//-----------------------------------------------
// 등록된 사용자 여부 확인
//-----------------------------------------------
String loginResult = loginService.loginCouncilSSO(req, councilCd, oauthUser);
// 정상 SNS 연동 로그인
if(loginResult == null) {
// 세션에 설정된 redirect 주소 확인
String councilReturnUrl = (String)session.getAttribute("councilReturnUrl");
return "redirect:" + councilReturnUrl;
}
log.debug("loginCouncilSSO > councilReturnUrl = " + councilReturnUrl);
if(StringUtil.isNotEmpty(councilReturnUrl)) {
redirectUrl = councilReturnUrl;
}
}
// SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않았거나 정보가 서로 맞지 않는 경우
else {
// SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않은 사용자 : 회원가입으로 전환
model.addAttribute("error", loginResult);
if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_MEMBERSHIP)) {
model.addAttribute("message", "회원가입하신 후, 이용 가능합니다.");
redirectUrl = NlibProperty.getString("member.new.url");
return "redirect:" + redirectUrl;
} else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) {
model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다.");
redirectUrl = NlibProperty.getString("login.back.url");
return "redirect:" + redirectUrl;
}
return "redirect:" + redirectUrl;

View File

@ -8,7 +8,9 @@
<constructor-arg value="naver" /><!-- Service Name -->
<constructor-arg value="jefkoYhSfrQ3TtZz5mTp" /><!-- naverClientID -->
<constructor-arg value="E2qAGaLEaG" /><!-- naverClientSecret -->
<constructor-arg value="https://nlib.nculture.org/nlib/login/naver/callback.do" /><!-- naverRedirectUrl -->
<!-- <constructor-arg value="https://nlib.nculture.org/nlib/login/naver/callback.do" /> --><!-- naverRedirectUrl -->
<!-- callType : login, member / oauthServiceName : naver, google, kakao -->
<constructor-arg value="https://nlib.nculture.org/nlib/{callType}/{oauthServiceName}/callback.do" /><!-- naverRedirectUrl -->
</bean>
<!-- GOOGLE OAuth Configuration -->