754 lines
31 KiB
Java
754 lines
31 KiB
Java
|
|
package nlib.user.web;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.inject.Inject;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
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.Model;
|
|
import org.springframework.ui.ModelMap;
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
import egovframework.com.ext.oauth.service.OAuthConfig;
|
|
import egovframework.com.ext.oauth.service.OAuthLogin;
|
|
import egovframework.com.ext.oauth.service.OAuthUniversalUser;
|
|
import egovframework.com.ext.oauth.service.OAuthVO;
|
|
import nlib.cmm.service.NlibProperty;
|
|
import nlib.cmm.session.SessionConfig;
|
|
import nlib.user.service.LoginService;
|
|
import nlib.user.service.NlibLoginVO;
|
|
import nlib.util.StringUtil;
|
|
|
|
/**
|
|
* <pre>
|
|
* @Class Name : LoginController.java
|
|
*
|
|
* @Description : 스프링 시큐리티를 이용한 로그인 처리 컨트롤러
|
|
*
|
|
*
|
|
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
|
|
*
|
|
* </pre>
|
|
*
|
|
* @ ------------ -------- ---------------------------
|
|
* @ 수정일 수정자 수정내용
|
|
* @ ------------ -------- ---------------------------
|
|
* @ 2021. 7. 9. KNKIM 최초 생성
|
|
* @ 2021. 8.18. KNKIM RESTful -> DB접속 방식으로 변경 처리
|
|
* @ 2021. 8.19. KNKIM 지방문화원별 다른 도메인 호스트 접속 처리를 위한 Spring Security 변경 작업, 네이버 전자정보 프레임워크 기반으로 변경
|
|
* @ 2021. 8.24. KNKIM 테이블 변경에 따른 항목명 변경 및 코드 정리작업
|
|
*
|
|
*
|
|
* @author 이씨플라자 * DIGITALSHIP KNKIM
|
|
* @since 2021. 7. 9.
|
|
* @version 1.0
|
|
*
|
|
*/
|
|
@Controller
|
|
public class LoginController {
|
|
|
|
public LoginController() {
|
|
super();
|
|
log.debug("==========================> LoginController Create : !!!! " + (new java.util.Date()));
|
|
}
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(LoginController.class);
|
|
|
|
//-------------------------------------------
|
|
// SNS 연동 환경설정 정보 : context-oauth.xml 참고
|
|
//-------------------------------------------
|
|
@Inject
|
|
private OAuthVO naverAuthVO; /* 네이버 */
|
|
|
|
@Inject
|
|
private OAuthVO googleAuthVO; /* 구글 */
|
|
|
|
@Inject
|
|
private OAuthVO kakaoAuthVO; /* 카카오 */
|
|
//-------------------------------------------
|
|
|
|
|
|
@Resource(name = "loginService")
|
|
private LoginService loginService;
|
|
|
|
|
|
/**
|
|
* 각 지방문화원 사이트에서 로그인을 위해서 최초 접속한다.
|
|
* 지방문화원 정보를 확인하여 로그인처리가 진행될 수 있도록 한다.
|
|
*
|
|
* @param req
|
|
* @param res
|
|
* @param session
|
|
* @param returnUrl
|
|
* @param model
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
@RequestMapping("/login/loginCouncil.do")
|
|
public String loginCouncil(
|
|
HttpServletRequest req,
|
|
HttpServletResponse res,
|
|
HttpSession session,
|
|
@RequestParam(required = false) String logout,
|
|
@RequestParam(required = false) String returnUrl,
|
|
@RequestParam(required = false) String callType,
|
|
ModelMap model) throws Exception {
|
|
|
|
String url = req.getRequestURL().toString();
|
|
String councilHomeUrl = url.replaceAll(req.getRequestURI(), "") + req.getContextPath();
|
|
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) {
|
|
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("councilReturnUrl", councilReturnUrl);
|
|
session.setAttribute("councilHomeUrl", councilHomeUrl);
|
|
|
|
session.setAttribute("councilDnsHost", councilDnsHost);
|
|
session.setAttribute("councilCd", councilCd);
|
|
session.setAttribute("councilNm", councilNm);
|
|
session.setAttribute("callType", callType);
|
|
|
|
log.debug("loginCouncil > sessionid=" + session.getId());
|
|
log.debug("loginCouncil > REQ URL = " + url);
|
|
log.debug("loginCouncil > councilJsessionId = " + session.getId());
|
|
log.debug("loginCouncil > councilDnsHost = " + councilDnsHost);
|
|
log.debug("loginCouncil > councilReturnUrl = " + councilReturnUrl);
|
|
log.debug("loginCouncil > councilHomeUrl = " + councilHomeUrl);
|
|
log.debug("loginCouncil > councilCd = " + councilCd);
|
|
log.debug("loginCouncil > councilNm = " + councilNm);
|
|
log.debug("loginCouncil > callType = " + callType);
|
|
|
|
model.addAttribute("url" , NlibProperty.getString("nculture.login.preset.redirect.url"));
|
|
model.addAttribute("councilJsessionId", session.getId());
|
|
model.addAttribute("councilDnsHost" , councilDnsHost);
|
|
model.addAttribute("councilCd" , councilCd);
|
|
model.addAttribute("councilNm" , StringUtil.encodeBase64(councilNm));
|
|
model.addAttribute("councilHomeUrl" , StringUtil.encodeBase64(councilHomeUrl));
|
|
model.addAttribute("councilReturnUrl" , StringUtil.encodeBase64(councilReturnUrl));
|
|
model.addAttribute("logout" , StringUtil.getString(logout, ""));
|
|
model.addAttribute("callType" , StringUtil.getString(callType, ""));
|
|
|
|
return "nlib/login/loginPreSet";
|
|
}
|
|
|
|
/**
|
|
* 로그인 콜백을 위한 설정을 처리한 후, 로그인 페이지로 전환한다.
|
|
*
|
|
* @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"));
|
|
String callType = paramMap.get("callType");
|
|
|
|
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);
|
|
log.debug("loginPreSet > callType = " + callType);
|
|
|
|
session.setAttribute("councilJsessionId", councilJsessionId);
|
|
session.setAttribute("councilReturnUrl", councilReturnUrl);
|
|
session.setAttribute("councilHomeUrl" , councilHomeUrl);
|
|
|
|
session.setAttribute("councilDnsHost", councilDnsHost);
|
|
session.setAttribute("councilCd" , councilCd);
|
|
session.setAttribute("councilNm" , councilNm);
|
|
session.setAttribute("callType" , callType);
|
|
|
|
String redirect = null;
|
|
if(OAuthLogin.CALL_TYPE_MEMBER.equalsIgnoreCase(callType)) {
|
|
redirect = councilHomeUrl + NlibProperty.getString("nculture.member.redirect.uri");
|
|
} else {
|
|
redirect = councilHomeUrl + NlibProperty.getString("nculture.login.redirect.uri");
|
|
redirect = StringUtil.addWebParamOfUrl(redirect, "logout", logout);
|
|
}
|
|
|
|
return "redirect:" + redirect;
|
|
}
|
|
|
|
/**
|
|
* 로그인 정보 입력 화면을 출력한다.
|
|
*
|
|
* @param req
|
|
* @param error
|
|
* @param logout
|
|
* @param model
|
|
* @return
|
|
*/
|
|
@RequestMapping("/login/loginForm.do")
|
|
public String loginForm(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 = (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);
|
|
log.debug("loginForm > councilHomeUrl = " + councilHomeUrl);
|
|
log.debug("loginForm > councilCd = " + councilCd);
|
|
log.debug("loginForm > councilNm = " + councilNm);
|
|
|
|
//----------------------------------------------
|
|
// SNS 연동 URL 생성
|
|
//----------------------------------------------
|
|
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.CALL_TYPE_LOGIN);
|
|
log.debug("googleLogin.getOAuthURL() = "+googleLogin.getOAuthURL());
|
|
model.addAttribute("googleUrl", googleLogin.getOAuthURL());
|
|
|
|
OAuthLogin kakaoLogin = new OAuthLogin(kakaoAuthVO, OAuthLogin.CALL_TYPE_LOGIN);
|
|
log.debug("kakaoLogin.getOAuthURL() = "+kakaoLogin.getOAuthURL());
|
|
model.addAttribute("kakaoUrl", kakaoLogin.getOAuthURL());
|
|
|
|
model.addAttribute("error", error);
|
|
model.addAttribute("message", message);
|
|
if(StringUtil.equalsIgnoreCase(logout, "logout")) {
|
|
model.addAttribute("message", "로그아웃되었습니다. 감사합니다.");
|
|
}
|
|
|
|
return "nlib/login/loginForm";
|
|
}
|
|
|
|
/**
|
|
* SNS 로그인 후, 콜백으로 호출되며 회원가입된 사용자가 존재하는 지 확인하여 로그인 처리가 진행될 수 있도록 한다.
|
|
* 정상 회원가입자인 경우, 해당 지방문화원 도메인(호스트)주소로 loginCouncilSSO(..)가 재호출되어 실제 세션 로그인 처리 마무리가 이루어진다.
|
|
*
|
|
* @param req
|
|
* @param oauthServiceName
|
|
* @param paramMap
|
|
* @param model
|
|
* @param session
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
@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,
|
|
@RequestParam(required = false) String error,
|
|
Model model,
|
|
HttpSession session) throws Exception {
|
|
|
|
String councilJsessionId = (String)session.getAttribute("councilJsessionId");
|
|
String councilCd = (String)session.getAttribute("councilCd");
|
|
String councilHomeUrl = (String)session.getAttribute("councilHomeUrl");
|
|
String redirectUrl = NlibProperty.getString("home.uri"); // "/index.do";
|
|
|
|
if(StringUtil.isNotEmpty(error)) {
|
|
|
|
// 구글 정보 제공 동의 거절한 경우
|
|
// https://nlib-dev.nculture.org/member/google/callback.do?error=access_denied
|
|
if(StringUtil.equalsIgnoreCase("access_denied", error)) {
|
|
if(OAuthLogin.CALL_TYPE_LOGIN.equalsIgnoreCase(callType)) {
|
|
// 로그인인 경우
|
|
redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.login.redirect.uri");
|
|
} else {
|
|
// 회원가입인 경우
|
|
redirectUrl = councilHomeUrl + NlibProperty.getString("nculture.login.post.member.redirect.uri");
|
|
}
|
|
model.addAttribute("url", redirectUrl);
|
|
model.addAttribute("message", StringUtil.encodeUrl("서비스를 이용하시려면 정보제공 동의가 필요합니다."));
|
|
return "nlib/login/loginPreSet";
|
|
}
|
|
}
|
|
|
|
log.debug("loginOauthCallback > sessionid=" + session.getId());
|
|
|
|
log.debug("oauthLoginCallback: code = ", code);
|
|
|
|
// SNS 클라이언트 설정 정보 할당
|
|
OAuthVO oauthVO = null;
|
|
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 {
|
|
throw new Exception("SNS 연동 콜백정보가 올바르지 않습니다.");
|
|
}
|
|
|
|
//-----------------------------------------------
|
|
// 1. code를 이용해서 Access Token 받기
|
|
// 2. Access Token을 이용해서 사용자 제공 정보 가져오기
|
|
//-----------------------------------------------
|
|
OAuthLogin oauthLogin = new OAuthLogin(oauthVO, callType);
|
|
OAuthUniversalUser oauthUser = oauthLogin.getUserProfile(code); // 1,2번 동시
|
|
log.debug("oauthLoginCallback > Profile ===>>" + oauthUser.getSnsId() + ", " + oauthUser.getSnsName());
|
|
|
|
// oAuth를 통한 SNS연동이 실패한 경우
|
|
if(oauthUser == null || !oauthUser.isValid()) {
|
|
redirectUrl = NlibProperty.getString("member.new.url"); // "/member/insertMemberInfoForm.do"
|
|
model.addAttribute("url", redirectUrl);
|
|
model.addAttribute("message", StringUtil.encodeUrl("먼저 회원가입하신 후, 이용하여 주시기 바랍니다."));
|
|
return "nlib/login/loginPreSet";
|
|
}
|
|
//-----------------------------------------------
|
|
// 해당 처리기로 전환
|
|
//-----------------------------------------------
|
|
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");
|
|
}
|
|
|
|
model.addAttribute("url", redirectUrl);
|
|
return "nlib/login/loginPreSet";
|
|
}
|
|
|
|
/**
|
|
* ID, PW를 입력받아 로그인을 처리한다.
|
|
* (스프링 시큐리티 로그인 수행)
|
|
*
|
|
* @param req
|
|
* @param res
|
|
* @param username
|
|
* @param password
|
|
* @param model
|
|
* @return
|
|
*/
|
|
@RequestMapping("/login/login.do")
|
|
public String login(HttpServletRequest req, HttpServletResponse res,
|
|
@RequestParam(required = false) String username, @RequestParam(required = false) String password,
|
|
ModelMap model) {
|
|
|
|
String loginResult = loginService.login(req, username, password);
|
|
String redirectUrl = NlibProperty.getString("home.uri");
|
|
|
|
// 정상적으로 로그인된 경우
|
|
if (StringUtil.isEmpty(loginResult)) {
|
|
RequestCache cache = new HttpSessionRequestCache();
|
|
SavedRequest savedRequest = cache.getRequest(req, res);
|
|
if (savedRequest != null) {
|
|
redirectUrl = savedRequest.getRedirectUrl();
|
|
}
|
|
}
|
|
// 로그인 실패
|
|
else {
|
|
redirectUrl = NlibProperty.getString("login.back.url") + "?error=" + loginResult;
|
|
}
|
|
|
|
log.debug("login.do > loginResult = " + loginResult);
|
|
log.debug("login.do > redirectUrl = " + redirectUrl);
|
|
|
|
return "redirect:" + redirectUrl;
|
|
}
|
|
|
|
/**
|
|
* 정상적인 사용자의 로그인 요청이 검증된 후, 실제 해당 지방문화원 사이트 URL로 호출되는 함수로써 로그인 최종 처리를 진행한다.
|
|
*
|
|
* @param req
|
|
* @param res
|
|
* @param session
|
|
* @param model
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
@RequestMapping("/login/loginCouncilSSO.do")
|
|
public String loginCouncilSSO(
|
|
HttpServletRequest req,
|
|
HttpServletResponse res,
|
|
HttpSession session,
|
|
ModelMap model) throws Exception {
|
|
|
|
String jsessionId = session.getId();
|
|
String councilCd = (String)session.getAttribute("councilCd");
|
|
String councilReturnUrl = (String)session.getAttribute("councilReturnUrl");
|
|
OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(jsessionId);
|
|
|
|
if(oauthUser == null || !oauthUser.isValid()) {
|
|
throw new Exception("잘못된 접근입니다.");
|
|
}
|
|
|
|
//-----------------------------------------------
|
|
// 로그인 처리
|
|
//-----------------------------------------------
|
|
String loginResult = loginService.loginCouncilSSO(req, councilCd, oauthUser);
|
|
|
|
// 정상 SNS 연동 로그인
|
|
if(loginResult == null) {
|
|
SessionConfig.removeLoginInfo(jsessionId);
|
|
// 세션에 설정된 redirect 주소 확인
|
|
return "redirect:" + councilReturnUrl;
|
|
}
|
|
|
|
// 휴면계좌
|
|
if(StringUtil.equalsIgnoreCase(loginResult, loginService.WRN_CODE_DORMANT)) {
|
|
return "redirect:" + NlibProperty.getString("login.dormant.url");
|
|
}
|
|
|
|
// SNS 로그인은 정상적이나, NLIB 시스템에 등록되지 않은 사용자 : 회원가입으로 전환
|
|
model.addAttribute("error", loginResult);
|
|
if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_MEMBERSHIP)) {
|
|
SessionConfig.setNewMemberInfo(jsessionId, oauthUser);
|
|
SessionConfig.removeLoginInfo(jsessionId);
|
|
model.addAttribute("message", "회원가입하신 후, 이용 가능합니다.");
|
|
return "redirect:" + NlibProperty.getString("member.new.url");
|
|
} else if(StringUtil.equalsIgnoreCase(loginResult, loginService.ERR_CODE_REQ_SNSLOGIN)) {
|
|
SessionConfig.removeLoginInfo(jsessionId);
|
|
model.addAttribute("message", "먼저 로그인할 SNS를 선택하여 로그인 바랍니다.");
|
|
return "redirect:" + NlibProperty.getString("login.back.url");
|
|
}
|
|
|
|
// 잘못된 접근 또는 기타 오류
|
|
SessionConfig.removeLoginInfo(jsessionId);
|
|
model.addAttribute("message", "기타 문제로 인하여 로그인에 실패하였습니다. : " + loginResult);
|
|
return "redirect:" + NlibProperty.getString("login.back.url");
|
|
}
|
|
|
|
/**
|
|
* 로그아웃 후의 처리를 담당한다. 스프링 시큐리티에서 로그아웃이 수행된 후, 호출된다.
|
|
*
|
|
* @param req
|
|
* @return
|
|
*/
|
|
@RequestMapping("/login/logout.do")
|
|
public String logout(HttpServletRequest req) {
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 휴면계좌 안내 및 해지 선택 화면을 표출한다.
|
|
*
|
|
* @param req
|
|
* @param error
|
|
* @param message
|
|
* @param logout
|
|
* @param redirectAttrs
|
|
* @param paramMap
|
|
* @param model
|
|
* @param session
|
|
* @return
|
|
*/
|
|
@RequestMapping("/login/activateDormantAccForm.do")
|
|
public String activateDormantAccForm(
|
|
HttpServletRequest req,
|
|
RedirectAttributes redirectAttrs,
|
|
@RequestParam Map<String, String> paramMap,
|
|
Model model,
|
|
HttpSession session) {
|
|
|
|
//----------------------------------------------
|
|
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
|
|
//----------------------------------------------
|
|
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("activateDormantAccForm > sessionid=" + session.getId());
|
|
log.debug("activateDormantAccForm > councilJsessionId = " + councilJsessionId);
|
|
log.debug("activateDormantAccForm > councilDnsHost = " + councilDnsHost);
|
|
log.debug("activateDormantAccForm > councilReturnUrl = " + councilReturnUrl);
|
|
log.debug("activateDormantAccForm > councilHomeUrl = " + councilHomeUrl);
|
|
log.debug("activateDormantAccForm > councilCd = " + councilCd);
|
|
log.debug("activateDormantAccForm > councilNm = " + councilNm);
|
|
|
|
OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId());
|
|
model.addAttribute("oauthUser", oauthUser);
|
|
return "nlib/login/activateDormantAccForm";
|
|
}
|
|
|
|
/**
|
|
* 휴면계좌 안내 및 해지 선택 화면을 표출한다.
|
|
*
|
|
* @param req
|
|
* @param error
|
|
* @param message
|
|
* @param logout
|
|
* @param redirectAttrs
|
|
* @param paramMap
|
|
* @param model
|
|
* @param session
|
|
* @return
|
|
*/
|
|
@RequestMapping("/login/activateDormantAcc.do")
|
|
public String activateDormantAcc(
|
|
HttpServletRequest req,
|
|
@RequestParam Map<String, String> paramMap,
|
|
Model model,
|
|
HttpSession session) {
|
|
|
|
String mbInfoId = StringUtil.getString(paramMap.get("mbInfoId"), "");
|
|
|
|
//----------------------------------------------
|
|
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
|
|
//----------------------------------------------
|
|
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("activateDormantAcc > sessionid=" + session.getId());
|
|
log.debug("activateDormantAcc > councilDnsHost = " + councilDnsHost);
|
|
log.debug("activateDormantAcc > councilReturnUrl = " + councilReturnUrl);
|
|
log.debug("activateDormantAcc > councilHomeUrl = " + councilHomeUrl);
|
|
log.debug("activateDormantAcc > councilCd = " + councilCd);
|
|
log.debug("activateDormantAcc > councilNm = " + councilNm);
|
|
|
|
OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId());
|
|
NlibLoginVO loginVO = oauthUser.getNlibVO();
|
|
|
|
if(loginVO == null || !mbInfoId.equals(loginVO.getMbInfoId())) {
|
|
model.addAttribute("code", "TIMEOUT");
|
|
model.addAttribute("message", "잘못된 접근입니다. 장시간 대기로 다시 로그인 하신 후, 이용해 주시기 바랍니다.");
|
|
return "nlib/login/activateDormantAccForm";
|
|
}
|
|
|
|
int ret = loginService.activateDormantAcc(loginVO);
|
|
|
|
if(ret < 1) {
|
|
model.addAttribute("code", "NO_TARGET");
|
|
model.addAttribute("message", "휴면사용자가 아닙니다. 다시 로그인하시거나 관리자에게 문의하여 주시기 바랍니다.");
|
|
return "nlib/login/activateDormantAccForm";
|
|
}
|
|
|
|
model.addAttribute("oauthUser", oauthUser);
|
|
|
|
return "nlib/login/activateDormantAcc";
|
|
}
|
|
|
|
@RequestMapping("/login/agreeProvInfoForm.do")
|
|
public String agreeProvInfoForm(
|
|
HttpServletRequest req,
|
|
RedirectAttributes redirectAttrs,
|
|
@RequestParam Map<String, String> paramMap,
|
|
Model model,
|
|
HttpSession session) {
|
|
|
|
//----------------------------------------------
|
|
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
|
|
//----------------------------------------------
|
|
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("activateDormantAccForm > sessionid=" + session.getId());
|
|
log.debug("activateDormantAccForm > councilDnsHost = " + councilDnsHost);
|
|
log.debug("activateDormantAccForm > councilReturnUrl = " + councilReturnUrl);
|
|
log.debug("activateDormantAccForm > councilHomeUrl = " + councilHomeUrl);
|
|
log.debug("activateDormantAccForm > councilCd = " + councilCd);
|
|
log.debug("activateDormantAccForm > councilNm = " + councilNm);
|
|
|
|
OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId());
|
|
model.addAttribute("oauthUser", oauthUser);
|
|
model.addAttribute("councilCd", councilCd);
|
|
model.addAttribute("councilNm", councilNm);
|
|
|
|
return "nlib/login/agreeProvInfoForm";
|
|
}
|
|
|
|
|
|
@RequestMapping("/login/agreeProvInfo.do")
|
|
public String agreeProvInfo(
|
|
HttpServletRequest req,
|
|
RedirectAttributes redirectAttrs,
|
|
@RequestParam Map<String, String> paramMap,
|
|
ModelMap model,
|
|
HttpSession session) throws Exception {
|
|
|
|
//----------------------------------------------
|
|
// 지방문화원 사이트에서 접속한 경우, 지방문화원 정보 확인
|
|
//----------------------------------------------
|
|
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");
|
|
|
|
String pCouncilCd = paramMap.get("councilCd");
|
|
|
|
if(StringUtil.isEmpty(pCouncilCd) || StringUtil.isEmpty(councilCd) || !StringUtil.equalsIgnoreCase(councilCd, pCouncilCd)) {
|
|
throw new Exception("잘못된 접근입니다.");
|
|
}
|
|
|
|
log.debug("agreeProvInfo > sessionid=" + session.getId());
|
|
log.debug("agreeProvInfo > councilDnsHost = " + councilDnsHost);
|
|
log.debug("agreeProvInfo > councilReturnUrl = " + councilReturnUrl);
|
|
log.debug("agreeProvInfo > councilHomeUrl = " + councilHomeUrl);
|
|
log.debug("agreeProvInfo > councilCd = " + councilCd);
|
|
log.debug("agreeProvInfo > councilNm = " + councilNm);
|
|
|
|
// 지방문화원 추가
|
|
OAuthUniversalUser oauthUser = SessionConfig.getLoginInfo(session.getId());
|
|
NlibLoginVO nlibLoginVO = oauthUser.getNlibVO();
|
|
nlibLoginVO.setJoinCouncilCd(pCouncilCd);
|
|
nlibLoginVO.setJoinType(oauthUser.getSnsType());
|
|
int resultCount = loginService.agreeProvInfo(nlibLoginVO);
|
|
|
|
model.addAttribute("resultCount", resultCount);
|
|
model.addAttribute("oauthUser", oauthUser);
|
|
model.addAttribute("councilCd", councilCd);
|
|
model.addAttribute("councilNm", councilNm);
|
|
|
|
return "nlib/login/agreeProvInfo";
|
|
}
|
|
|
|
|
|
// // 구글 로그인 콜백
|
|
// @RequestMapping(value = "/login/googleCallback.do")
|
|
// public String googleCallback(@RequestParam(value = "code") String authCode, HttpSession session, Model model,
|
|
// HttpServletRequest request) throws Exception {
|
|
//
|
|
// String code = request.getParameter("code");
|
|
// HttpHeaders headers = new HttpHeaders();
|
|
// RestTemplate restTemplate = new RestTemplate();
|
|
// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
|
//
|
|
// MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
|
|
// parameters.add("code", code);
|
|
// parameters.add("client_id", "879126511006-jro7bld7b2epl3n5mkksp0p24k2inbpu.apps.googleusercontent.com");
|
|
// parameters.add("client_secret", "F6T-ZV9jibLhKtcugxPUtBlN");
|
|
// parameters.add("redirect_uri", "http://nlib.nculture.org/nlib/login/googleCallback.do");
|
|
// parameters.add("grant_type", "authorization_code");
|
|
//
|
|
// HttpEntity<MultiValueMap<String,String>> rest_request = new HttpEntity<>(parameters,headers);
|
|
//
|
|
// URI uri = URI.create("https://www.googleapis.com/oauth2/v4/token");
|
|
//
|
|
// ResponseEntity<String> resultEntity;
|
|
// resultEntity = restTemplate.postForEntity(uri, rest_request, String.class);
|
|
// // JSON 파싱을 위한 기본값 세팅
|
|
// // 요청시 파라미터는 스네이크 케이스로 세팅되므로 Object mapper에 미리 설정해준다.
|
|
// ObjectMapper mapper = new ObjectMapper();
|
|
// mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
|
|
// mapper.setSerializationInclusion(Include.NON_NULL);
|
|
// // Token Request
|
|
// GoogleOAuthResponse result = mapper.readValue(resultEntity.getBody(), new TypeReference<GoogleOAuthResponse>() {
|
|
// });
|
|
//
|
|
// // ID Token만 추출 (사용자의 정보는 jwt로 인코딩 되어있다)
|
|
// String jwtToken = result.getIdToken();
|
|
// String requestUrl = UriComponentsBuilder.fromHttpUrl("https://oauth2.googleapis.com/tokeninfo")
|
|
// .queryParam("id_token", jwtToken).toUriString();
|
|
//
|
|
// String resultJson = restTemplate.getForObject(requestUrl, String.class);
|
|
//
|
|
// Map<String, String> userInfo = mapper.readValue(resultJson, new TypeReference<Map<String, String>>() {
|
|
// });
|
|
// System.out.println(userInfo.get("email"));
|
|
// model.addAttribute("token", result.getAccessToken());
|
|
//
|
|
// return "redirect:/";
|
|
// }
|
|
// @RequestMapping(value = "/login/kakaoCallback.do")
|
|
// public ModelAndView kakaoCallback(@RequestParam("code") String code, HttpServletRequest request, HttpServletResponse response, HttpSession session)
|
|
// throws Exception {
|
|
// ModelAndView mav = new ModelAndView();
|
|
// // 결과값을 node에 담아줌
|
|
// String k_redirect_url="http://nlib.nculture.org/nlib/login/kakaoCallback.do";
|
|
// JsonNode node = KakaoController.getAccessToken(code,k_redirect_url);
|
|
// // accessToken에 사용자의 로그인한 모든 정보가 들어있음
|
|
// JsonNode accessToken = node.get("access_token");
|
|
// // 사용자의 정보
|
|
// JsonNode userInfo = KakaoController.getKakaoUserInfo(accessToken);
|
|
// String kemail = null;
|
|
// String kname = null;
|
|
// String kgender = null;
|
|
// String kbirthday = null;
|
|
// String kage = null;
|
|
// String kimage = null;
|
|
// // 유저정보 카카오에서 가져오기Get properties
|
|
// JsonNode properties = userInfo.path("properties");
|
|
// JsonNode kakao_account = userInfo.path("kakao_account");
|
|
// kemail = kakao_account.path("email").asText();
|
|
// kname = properties.path("nickname").asText();
|
|
// kimage = properties.path("profile_image").asText();
|
|
// kgender = kakao_account.path("gender").asText();
|
|
// kbirthday = kakao_account.path("birthday").asText();
|
|
// kage = kakao_account.path("age_range").asText();
|
|
// session.setAttribute("kemail", kemail);
|
|
// session.setAttribute("kname", kname);
|
|
// session.setAttribute("kimage", kimage);
|
|
// session.setAttribute("kgender", kgender);
|
|
// session.setAttribute("kbirthday", kbirthday);
|
|
// session.setAttribute("kage", kage);
|
|
// mav.setViewName("main");
|
|
// return mav;
|
|
// }// end kakaoLogin()
|
|
//
|
|
|
|
} |