지방문화원 접속 처리 개선 및 SNS콜백 처리 보완 및 통일화

This commit is contained in:
KNKIM 2021-08-31 16:19:52 +09:00
parent a7858f5d93
commit de7f073201
11 changed files with 199 additions and 140 deletions

View File

@ -35,11 +35,19 @@ import nlib.util.StringUtil;
public class OAuthLogin {
/** SNS 호출 시, URL callType 대체 문자열 */
public static final String CALL_TYPE_LOGIN = "login";
public static final String CALL_TYPE_MEMBER = "member";
private OAuth20Service oauthService;
private OAuthVO oauthVO;
public OAuthLogin(OAuthVO oauthVO) {
public OAuthLogin(OAuthVO oauthVO, String callType) {
if(oauthVO.getService().equals("google"))
{
ScopeBuilder scope = new ScopeBuilder();
scope.withScope("profile");
scope.withScope("openid");
@ -47,24 +55,22 @@ public class OAuthLogin {
scope.withScope("https://www.googleapis.com/auth/user.phonenumbers.read");
scope.withScope("https://www.googleapis.com/auth/user.birthday.read");
if(oauthVO.getService().equals("google"))
{
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
.apiSecret(oauthVO.getClientSecret())
.callback(oauthVO.getRedirectUrl())
.callback(oauthVO.getRedirectUrl(callType))
.defaultScope(scope)
//.scope("profile")
.build(oauthVO.getApi20Instance());
}else if(oauthVO.getService().equals("kakao") || oauthVO.getService().equals("naver"))
{
} else if(oauthVO.getService().equals("kakao") || oauthVO.getService().equals("naver")) {
this.oauthService = new ServiceBuilder(oauthVO.getClientId())
.apiSecret(oauthVO.getClientSecret())
.callback(oauthVO.getRedirectUrl())
.callback(oauthVO.getRedirectUrl(callType))
//.scope("profile")
.build(oauthVO.getApi20Instance());
}
this.oauthVO = oauthVO;
}
@ -90,10 +96,10 @@ public class OAuthLogin {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(body);
if (this.oauthVO.isNaver()) {
//------------------------------------
// 네이버 (2021.08.19 KKN)
//------------------------------------
if (this.oauthVO.isNaver()) {
user.setSnsType(OAuthConfig.NAVER_SERVICE_NAME);
JsonNode resNode = rootNode.get("response");
@ -135,10 +141,10 @@ public class OAuthLogin {
user.setValidLogin(true);
}
else if (this.oauthVO.isGoogle()) {
//------------------------------------
// 구글
//------------------------------------
else if (this.oauthVO.isGoogle()) {
user.setSnsType(OAuthConfig.GOOGLE_SERVICE_NAME);
if (rootNode.has("sub"))
user.setSnsId(StringUtil.getString(rootNode.get("sub").asText(), ""));
@ -148,10 +154,10 @@ public class OAuthLogin {
}
else if (this.oauthVO.isKakao()) {
//------------------------------------
// 카카오
//------------------------------------
else if (this.oauthVO.isKakao()) {
user.setSnsType(OAuthConfig.KAKAO_SERVICE_NAME);
JsonNode resNode = rootNode.get("kakao_account");
@ -170,7 +176,6 @@ public class OAuthLogin {
if (resNode.has("phone_number"))
user.setSnsMobileNo(StringUtil.getString(resNode.get("phone_number").asText(), ""));
}
return user;

View File

@ -30,8 +30,10 @@ public class OAuthVO implements OAuthConfig {
this.clientSecret = clientSecret;
}
public String getRedirectUrl() {
return redirectUrl;
public String getRedirectUrl(String callType) {
String retUrl = redirectUrl.replaceAll("\\{callType\\}", callType);
retUrl = retUrl.replaceAll("\\{oauthServiceName\\}", getService());
return retUrl;
}
public void setRedirectUrl(String redirectUrl) {

View File

@ -51,19 +51,19 @@ public class NlibInterceptor extends HandlerInterceptorAdapter {
// 지방문화원 접속 정보를 세션에 담기
//---------------------------------------
HttpSession session = request.getSession();
String curCouncilCd = (String)session.getAttribute("curCouncilCd");
if(StringUtil.isEmpty(curCouncilCd)) {
log.debug("preHandle > sessionid=" + session.getId());
String councilCd = (String)session.getAttribute("councilCd");
if(StringUtil.isEmpty(councilCd)) {
// 지방문화원 코드 확인
String curCouncilDnsHost = StringUtil.getHostName(request.getRequestURL().toString());
HashMap<String, String> councilInfoMap = loginService.selectCouncilInfoByDnsHost(curCouncilDnsHost);
curCouncilCd = councilInfoMap.get("councilCd");
if(StringUtil.equals(NlibProperty.getString(""), curCouncilCd)) {
String councilDnsHost = StringUtil.getHostName(request.getRequestURL().toString());
HashMap<String, String> councilInfoMap = loginService.selectCouncilInfoByDnsHost(councilDnsHost);
councilCd = councilInfoMap.get("councilCd");
if(!StringUtil.equalsIgnoreCase(NlibProperty.getString("nlib.council.cd"), councilCd)) {
session.setAttribute("councilCd" , councilCd);
session.setAttribute("councilNm" , councilInfoMap.get("councilNm"));
session.setAttribute("councilDnsHost", councilDnsHost);
}
session.setAttribute("curCouncilCd" , curCouncilCd);
session.setAttribute("curCouncilNm" , councilInfoMap.get("councilNm"));
session.setAttribute("curCouncilDnsHost", curCouncilDnsHost);
}
return true;

View File

@ -44,7 +44,7 @@ public class SessionConfig implements HttpSessionListener {
private static final String DELIMITER = "\t";
/* 세션별 로그인 처리 가능한 정보 목록 */
private static final Map<String, String> loginSessions = new ConcurrentHashMap<>();
private static final Map<String, OAuthUniversalUser> loginSessions = new ConcurrentHashMap<>();
/* 세션별 회원가입 처리 가능한 정보 목록 */
private static final Map<String, OAuthUniversalUser> memberSessions = new ConcurrentHashMap<>();
@ -73,9 +73,9 @@ public class SessionConfig implements HttpSessionListener {
* @param snsType
* @param snsId
*/
public static void setLoginInfo(String sessionId, String snsType, String snsId) {
log.debug("setLoginInfo : " + sessionId + ", " + snsType + ", " + snsId);
loginSessions.put(sessionId, StringUtil.getString(snsType, "NONE") + DELIMITER + StringUtil.getString(snsId, "NONE"));
public static void setLoginInfo(String sessionId, OAuthUniversalUser oUser) {
log.debug("setLoginInfo : " + sessionId + ", " + oUser.getSnsType() + ", " + oUser.getSnsId());
loginSessions.put(sessionId, oUser);
}
/**
@ -87,16 +87,13 @@ public class SessionConfig implements HttpSessionListener {
* @param sessionId
* @return
*/
public static String[] getLoginInfo(String sessionId) {
public static OAuthUniversalUser popLoginInfo(String sessionId) {
if(StringUtil.isEmpty(sessionId)) return null;
String loginInfo = loginSessions.get(sessionId);
if(StringUtil.isEmpty(loginInfo)) return null;
OAuthUniversalUser ret = loginSessions.get(sessionId);
String ret[] = loginInfo.split(DELIMITER);
log.debug("setLoginInfo : " + sessionId + ", " + ret[0] + ", " + ret[1]);
removeLoginInfo(sessionId);
return ret;
}
@ -134,9 +131,13 @@ public class SessionConfig implements HttpSessionListener {
* @param sessionId
* @return
*/
public static OAuthUniversalUser getNewMemberInfo(String sessionId) {
public static OAuthUniversalUser popNewMemberInfo(String sessionId) {
if(StringUtil.isEmpty(sessionId)) return null;
return memberSessions.get(sessionId);
OAuthUniversalUser ret = memberSessions.get(sessionId);
removeNewMemberInfo(sessionId);
return ret;
}
/**

View File

@ -1,8 +1,14 @@
package nlib.cmm.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.RequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
@ -35,7 +41,15 @@ public class MainController {
private static final Logger log = LoggerFactory.getLogger(MainController.class);
@RequestMapping( {"/index.do"} )
public String setContent(Authentication authentication, ModelMap model) {
public String setContent(
HttpServletRequest req,
HttpServletResponse res,
Authentication authentication,
ModelMap model) {
// 캐쉬된 Reqeust 히스토리 삭제
RequestCache cache = new HttpSessionRequestCache();
cache.removeRequest(req, res);
log.debug((authentication == null ? "손님 메인 접속" : authentication.getName() + " 메인 접속"));
return "nlib/cmm/home";

View File

@ -5,10 +5,7 @@ import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.LockedException;
import egovframework.com.ext.oauth.service.OAuthUniversalUser;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
@ -28,7 +25,7 @@ public interface LoginService
public String loginOauth(HttpServletRequest req, String oauthServiceName, String snsId, String joinCouncilCd, String councilJsessionId);
public String loginCouncilSSO(HttpServletRequest req, String joinCouncilCd, String councilJsessionId);
public String loginCouncilSSO(HttpServletRequest req, String councilCd, OAuthUniversalUser oUser);
public DataApiResVO logout(DataApiReqVO reqVO);

View File

@ -18,6 +18,7 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import egovframework.com.ext.oauth.service.OAuthUniversalUser;
import nlib.cmm.service.NlibProperty;
import nlib.cmm.session.SessionConfig;
import nlib.restful.service.DataApiReqVO;
@ -89,7 +90,8 @@ public class LoginServiceImpl implements LoginService
}
// 세션목록관리에 로그인 정상 가능 정보 추가
SessionConfig.setLoginInfo(councilJsessionId, oauthServiceName, snsId);
// TODO
//SessionConfig.setLoginInfo(councilJsessionId, o);
// 회원가입정보 존재하는 SNS 아이디임을 확인 완료
return null;
@ -102,25 +104,17 @@ 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 joinCouncilCd, String councilJsessionId) {
public String loginCouncilSSO(HttpServletRequest req, String councilCd, OAuthUniversalUser oUser) {
// 세션에서 로그인 처리 가능 정보 가져오기
String loginInfo[] = SessionConfig.getLoginInfo(councilJsessionId);
if(loginInfo == null || loginInfo.length < 2) return ERR_CODE_REQ_SNSLOGIN;
if(oUser == null) return ERR_CODE_REQ_SNSLOGIN;
String oauthServiceName = loginInfo[0];
String snsId = loginInfo[1];
if(!oUser.isValid()) return ERR_CODE_REQ_SNSLOGIN;
if(StringUtil.isEmpty(oauthServiceName))
return ERR_CODE_REQ_SNSLOGIN;
if(StringUtil.isEmpty(snsId))
return ERR_CODE_REQ_SNSLOGIN;
// 회원DB에서 사용자 정보 조회
// SNS 연동 사용자UID로 사용자정보 조회
NlibLoginVO nLoginParamVO = new NlibLoginVO();
nLoginParamVO.setSnsId(snsId);
nLoginParamVO.setSnsType(oauthServiceName);
nLoginParamVO.setJoinCouncilCd(joinCouncilCd);
nLoginParamVO.setSnsId(oUser.getSnsId());
nLoginParamVO.setSnsType(oUser.getSnsType());
nLoginParamVO.setJoinCouncilCd(councilCd);
NlibLoginVO nLoginVO = loginDAO.selectLoginUserInfo(nLoginParamVO);
if(nLoginVO == null) {
@ -139,7 +133,6 @@ public class LoginServiceImpl implements LoginService
loginDAO.insertLoginLog(nlibLoginedVO);
return null;
}
/**

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");
@ -265,9 +306,9 @@ public class LoginController {
// 1. code를 이용해서 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 -->

View File

@ -26,7 +26,10 @@ login.url = /login/loginCouncil.do
# \ub85c\uadf8\uc778 \ubb38\uc81c \ubc1c\uc0dd \uc2dc, \ub2e4\uc2dc \ub9ac\ub2e4\uc774\ub809\ud2b8\ub420 \ub85c\uadf8\uc778\ud654\uba74 \uc8fc\uc18c
login.back.url = /login/loginForm.do
# \uc9c0\ubc29\ubb38\ud654\uc6d0\uc5d0\uc11c \uc811\uc18d\uc2dc \ub9ac\ub2e4\uc774\ub809\ud2b8\ub420 URL \uc815\ubcf4
nculture.login.redirect.url = http://nlib.nculture.org/nlib/login/loginForm.do
nculture.login.redirect.uri = /login/loginForm.do
nculture.login.post.login.redirect.uri = /login/loginCouncilSSO.do
nculture.login.post.member.redirect.uri = /member/insertMemberInfoForm.do
nculture.login.preset.redirect.url = http://nlib.nculture.org/nlib/login/loginPreSet.do
#----------------------------------------
# NLIB \uc9c0\ubc29\ubb38\ud654\uc6d0\uc815\ubcf4
@ -119,9 +122,6 @@ oauth2.client.provider.kakao.authorization-uri = https://kauth.kakao.com/oauth
oauth2.client.provider.kakao.token-uri = https://kauth.kakao.com/oauth/token?client_id=
oauth2.client.provider.kakao.user-info-uri = https://kapi.kakao.com/v2/user/me
# \ucf5c\ubc31 \uc8fc\uc18c (login,signUp)
oauth2.client.callback.login.url = https://nlib.nculture.org/nlib/login/{oauthServiceName}/callback.do
oauth2.client.callback.member.url = https://nlib.nculture.org/nlib/member/{oauthServiceName}/callback.do
#----------------------------------------
# \uc190\ub2d8\uc815\ubcf4
#----------------------------------------

View File

@ -7,7 +7,8 @@
<!-- HOME -->
<%
String councilCd = (String)session.getAttribute("councilCd");
String councilNm = (String)session.getAttribute("councilCd");
%>
<sec:authorize access="isAuthenticated()">
<dir id="title"><a href="javascript:void(0)" onclick="javascript:location.href='<%=session.getAttribute("councilHomeUrl") %>';">온라인자료대출관리 (<%=session.getAttribute("councilHomeUrl") %>)</a></dir>
@ -39,7 +40,7 @@
${userName}님 (${userId})
</sec:authorize>
<sec:authorize access="not isAuthenticated()">
손님
손님 __${councilCd }---
</sec:authorize>
</li>
</ul>