소스 충돌

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 councilReturnUrl = councilHomeUrl + (StringUtil.isEmpty(returnUrl) ? "/" : returnUrl);
String councilDnsHost = StringUtil.getHostName(url); String councilDnsHost = StringUtil.getHostName(url);
// 캐쉬된 요청URL인 존재하는 경우, 리턴URL로 설정
RequestCache cache = new HttpSessionRequestCache(); RequestCache cache = new HttpSessionRequestCache();
SavedRequest savedRequest = cache.getRequest(req, res); SavedRequest savedRequest = cache.getRequest(req, res);
if (savedRequest != null) { if (savedRequest != null) {
@ -119,27 +120,19 @@ public class LoginController {
log.debug("loginCouncil > HttpSessionRequestCache에서 획득 councilReturnUrl = " + councilReturnUrl); 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); HashMap<String, String> councilInfo = loginService.selectCouncilInfoByDnsHost(councilDnsHost);
String councilCd = (councilInfo == null ? null : councilInfo.get("councilCd")); String councilCd = (councilInfo == null ? null : councilInfo.get("councilCd"));
String councilNm = (councilInfo == null ? null : councilInfo.get("councilNm")); String councilNm = (councilInfo == null ? null : councilInfo.get("councilNm"));
session.setAttribute("councilDnsHost", councilDnsHost);
session.setAttribute("councilReturnUrl", councilReturnUrl); session.setAttribute("councilReturnUrl", councilReturnUrl);
session.setAttribute("councilHomeUrl", councilHomeUrl); session.setAttribute("councilHomeUrl", councilHomeUrl);
session.setAttribute("councilDnsHost", councilDnsHost);
session.setAttribute("councilCd", councilCd); session.setAttribute("councilCd", councilCd);
session.setAttribute("councilNm", councilNm); session.setAttribute("councilNm", councilNm);
log.debug("loginCouncil > sessionid=" + session.getId());
log.debug("loginCouncil > REQ URL = " + url); log.debug("loginCouncil > REQ URL = " + url);
log.debug("loginCouncil > councilJsessionId = " + session.getId()); log.debug("loginCouncil > councilJsessionId = " + session.getId());
log.debug("loginCouncil > councilDnsHost = " + councilDnsHost); log.debug("loginCouncil > councilDnsHost = " + councilDnsHost);
@ -155,9 +148,59 @@ public class LoginController {
"&councilHomeUrl=" + StringUtil.encodeBase64(councilHomeUrl) + "&councilHomeUrl=" + StringUtil.encodeBase64(councilHomeUrl) +
"&councilReturnUrl=" + StringUtil.encodeBase64(councilReturnUrl); "&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 councilJsessionId = (String)session.getAttribute("councilJsessionId");
String councilDnsHost = paramMap.get("councilDnsHost"); String councilDnsHost = (String)session.getAttribute("councilDnsHost");
String councilReturnUrl = StringUtil.decodeBase64(paramMap.get("councilReturnUrl")); String councilReturnUrl = (String)session.getAttribute("councilReturnUrl");
String councilHomeUrl = StringUtil.decodeBase64(paramMap.get("councilHomeUrl")); String councilHomeUrl = (String)session.getAttribute("councilHomeUrl");
String councilCd = paramMap.get("councilCd"); String councilCd = (String)session.getAttribute("councilCd");
String councilNm = StringUtil.decodeBase64(paramMap.get("councilNm")); String councilNm = (String)session.getAttribute("councilNm");
log.debug("loginForm > sessionid=" + session.getId());
log.debug("loginForm > councilJsessionId = " + councilJsessionId); log.debug("loginForm > councilJsessionId = " + councilJsessionId);
log.debug("loginForm > councilDnsHost = " + councilDnsHost); log.debug("loginForm > councilDnsHost = " + councilDnsHost);
log.debug("loginForm > councilReturnUrl = " + councilReturnUrl); log.debug("loginForm > councilReturnUrl = " + councilReturnUrl);
@ -194,25 +238,18 @@ 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("councilJsessionId", councilJsessionId);
session.setAttribute("councilDnsHost", councilDnsHost);
session.setAttribute("councilReturnUrl", councilReturnUrl);
session.setAttribute("councilHomeUrl" , councilHomeUrl);
session.setAttribute("councilCd" , councilCd);
session.setAttribute("councilNm" , councilNm);
//---------------------------------------------- //----------------------------------------------
// SNS 연동 URL 생성 // SNS 연동 URL 생성
//---------------------------------------------- //----------------------------------------------
OAuthLogin naverLogin = new OAuthLogin(naverAuthVO); OAuthLogin naverLogin = new OAuthLogin(naverAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
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); OAuthLogin googleLogin = new OAuthLogin(googleAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
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); OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL()); log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL());
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL()); model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
@ -235,14 +272,18 @@ public class LoginController {
* @return * @return
* @throws Exception * @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( public String loginOauthCallback(
HttpServletRequest req, HttpServletRequest req,
@PathVariable String callType,
@PathVariable String oauthServiceName, @PathVariable String oauthServiceName,
@RequestParam(required = false) String code, @RequestParam(required = false) String code,
Model model, Model model,
HttpSession session) throws Exception { HttpSession session) throws Exception {
log.debug("loginOauthCallback > sessionid=" + session.getId());
String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do"; String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do";
String councilJsessionId = (String)session.getAttribute("councilJsessionId"); String councilJsessionId = (String)session.getAttribute("councilJsessionId");
String councilCd = (String)session.getAttribute("councilCd"); String councilCd = (String)session.getAttribute("councilCd");
@ -263,11 +304,11 @@ public class LoginController {
//----------------------------------------------- //-----------------------------------------------
// 1. code를 이용해서 Access Token 받기 // 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번 동시 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연동이 실패한 경우 // oAuth를 통한 SNS연동이 실패한 경우
if(oauthUser == null || !oauthUser.isValid()) { if(oauthUser == null || !oauthUser.isValid()) {
@ -277,26 +318,17 @@ public class LoginController {
} }
//----------------------------------------------- //-----------------------------------------------
// 등록된 사용자 여부 확인 // 해당 처리기로 전환
//----------------------------------------------- //-----------------------------------------------
String loginResult = loginService.loginOauth(req, oauthServiceName, oauthUser.getSnsId(), councilCd, councilJsessionId); String councilHomeUrl = (String)session.getAttribute("councilHomeUrl");
if(OAuthLogin.CALL_TYPE_LOGIN.equalsIgnoreCase(callType)) {
// 정상 SNS 연동 로그인 // 로그인인 경우
if(loginResult == null) { SessionConfig.setLoginInfo(councilJsessionId, oauthUser);
// 세션에 설정된 redirect 주소 확인 redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.login.redirect.uri");
String councilHomeUrl = (String)session.getAttribute("councilHomeUrl"); } else {
redirectUrl = councilHomeUrl + "/login/loginCouncilSSO.do"; // 회원가입인 경우
return "redirect:" + redirectUrl; SessionConfig.setNewMemberInfo(councilJsessionId, oauthUser);
} redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.member.redirect.uri");
// 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");
} }
return "redirect:" + redirectUrl; return "redirect:" + redirectUrl;
@ -361,22 +393,34 @@ public class LoginController {
String jsessionId = session.getId(); String jsessionId = session.getId();
String councilCd = (String)session.getAttribute("councilCd"); 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) { if(loginResult == null) {
// 세션에 설정된 redirect 주소 확인 // 세션에 설정된 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); 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"); redirectUrl = NlibProperty.getString("login.back.url");
return "redirect:" + redirectUrl;
} }
return "redirect:" + redirectUrl; return "redirect:" + redirectUrl;

View File

@ -8,7 +8,9 @@
<constructor-arg value="naver" /><!-- Service Name --> <constructor-arg value="naver" /><!-- Service Name -->
<constructor-arg value="jefkoYhSfrQ3TtZz5mTp" /><!-- naverClientID --> <constructor-arg value="jefkoYhSfrQ3TtZz5mTp" /><!-- naverClientID -->
<constructor-arg value="E2qAGaLEaG" /><!-- naverClientSecret --> <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> </bean>
<!-- GOOGLE OAuth Configuration --> <!-- GOOGLE OAuth Configuration -->