fairnet/src/main/java/kcc/let/uat/uia/web/EgovLoginController.java

2429 lines
110 KiB
Java

package kcc.let.uat.uia.web;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.annotation.Resource;
import javax.script.ScriptEngineManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
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.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.support.RequestContextUtils;
import com.bandi.oauth.BandiSSOAgent;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import egovframework.rte.fdl.cmmn.trace.LeaveaTrace;
import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import kcc.com.cmm.EgovMessageSource;
import kcc.com.cmm.LoginVO;
import kcc.com.cmm.captcha.CaptchaUtil;
import kcc.com.cmm.spring.data.util.ProfileUtil;
import kcc.com.cmm.util.StringUtil;
import kcc.com.cmm.util.WebUtil;
import kcc.let.sym.log.clg.service.EgovLoginLogService;
import kcc.let.sym.log.clg.service.LoginLog;
import kcc.let.sym.mnu.mpm.service.MenuManageJTreeVO;
import kcc.let.sym.site.service.EgovSiteManagerService;
import kcc.let.sym.site.service.SiteManagerVO;
import kcc.let.uat.uap.service.EgovLoginPolicyService;
import kcc.let.uat.uap.service.LoginPolicyVO;
import kcc.let.uat.uia.service.EgovLoginService;
import kcc.let.uat.uia.service.SsoLoginVO;
import kcc.let.uss.umt.service.EgovMberManageService;
import kcc.let.uss.umt.service.EgovUserManageService;
import kcc.let.uss.umt.service.MberManageConfigVO;
import kcc.let.uss.umt.service.UserDefaultVO;
import kcc.let.uss.umt.service.UserGuestVO;
import kcc.let.uss.umt.service.UserManageVO;
import kcc.let.utl.sim.service.EgovClntInfo;
/**
* 일반 로그인, 인증서 로그인을 처리하는 컨트롤러 클래스
*
* @author 공통서비스 개발팀 박지욱
* @since 2009.03.06
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.06 박지욱 최초 생성
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
*
* </pre>
*/
@Controller
public class EgovLoginController {
// static String RSA_WEB_KEY = "_RSA_WEB_Key_"; // 개인키 session key
// static String RSA_INSTANCE = "RSA"; // rsa transformation
private static final Logger LOGGER = LoggerFactory.getLogger(EgovLoginController.class);
/** 네이버 인증 관련 */
@Value("#{globalSettings['Globals.kcc.naver.clentId']}")
private String itnNaverClientId;
@Value("#{globalSettings['Globals.kcc.naver.clientSecret']}")
private String itnNaverClientSecret;
@Value("#{globalSettings['Globals.kcc.naver.returnUrl']}")
private String itnNaverReturnUrl;
/** 카카오 인증 관련 */
@Value("#{globalSettings['Globals.kcc.kakao.restApiKey']}")
private String itnKakaoRestApiKey;
@Value("#{globalSettings['Globals.kcc.kakao.returnUrl']}")
private String itnKakaoReturnUrl;
/** SSO return URL */
@Value("#{globalSettings['Globals.sso.returnSiteUrl']}")
private String returnSiteUrlGlobal;
@Value("#{globalSettings['Globals.sso.returnSiteCode']}")
private String returnSiteCodeGlobal;
/** SSO 회원관련 URL */
@Value("#{globalSettings['Globals.sso.joinUrl']}")
private String joinUrl_Global;
@Value("#{globalSettings['Globals.sso.modifyUrl']}")
private String modifyUrl_Global;
@Value("#{globalSettings['Globals.sso.idFindUrl']}")
private String idFindUrl_Global;
@Value("#{globalSettings['Globals.sso.pwFindUrl']}")
private String pwFindUrl_Global;
@Value("#{globalSettings['Globals.prod.islocal']}")
private String islocal;
/** EgovLoginService */
@Resource(name = "loginService")
private EgovLoginService loginService;
/** EgovMessageSource */
@Resource(name = "egovMessageSource")
EgovMessageSource egovMessageSource;
/** EgovLoginPolicyService */
@Resource(name = "egovLoginPolicyService")
EgovLoginPolicyService egovLoginPolicyService;
/** EgovPropertyService */
@Resource(name = "propertiesService")
protected EgovPropertyService propertiesService;
/** TRACE */
@Resource(name = "leaveaTrace")
LeaveaTrace leaveaTrace;
@Resource(name = "EgovLoginLogService")
private EgovLoginLogService loginLogService;
@Resource(name = "egovSiteManagerService")
private EgovSiteManagerService egovSiteManagerService;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/** mberManageService */
@Resource(name = "mberManageService")
private EgovMberManageService mberManageService;
/*
*//**
* (관리자)로그인 화면으로 들어간다
*
* @param vo - 로그인후 이동할 URL이 담긴 LoginVO
* @return 로그인 페이지
* @exception Exception
*//*
* @RequestMapping(value = "/uat/uia/egovLoginUsr.do") public String
* loginUsrView(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest
* request, HttpServletResponse response, ModelMap model) throws Exception {
* return "uat/uia/EgovLoginUsr"; }
*/
/**
* (관리자) 로그인 화면.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/uat/uia/EgovLoginUsr.do")
public String adminLogin(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/cmm/main/mainPage.do";
// initRsa(request);
//로그인 페이지 접근시 IP체크 제거_로그인 버튼 클릭 시 로그인 유형에 따라 체크로 변경_221011_이준호
// 로그인 페이지 IP 체크
/*List<LoginPolicyVO> loginPolicyGroupList = new ArrayList<LoginPolicyVO>();
LoginPolicyVO loginPolicyVOCheck = new LoginPolicyVO();
String userIpCheck = EgovClntInfo.getClntIP(request);
LOGGER.debug("userIpCheck: [" + userIpCheck + "]");
loginPolicyGroupList = egovLoginPolicyService.selectLoginGroupPolicyAllIP(loginPolicyVOCheck);
boolean ipCheck = false;
if (loginPolicyGroupList != null) {
for (LoginPolicyVO tempPolicyVO : loginPolicyGroupList) {
// if(userIpCheck.equals(tempPolicyVO.getIpInfo())){
if (userIpCheck.contains(tempPolicyVO.getIpInfo())) {
ipCheck = true;
break;
}
}
}
// 1. Spring Security 사용자권한 처리
if (!ipCheck) {
return "/cmm/error/ipFailure";
}*/
if (!isAuthenticated) {
// model.addAttribute("message",
// egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsr";
}
//interceptor시 flashmap을 통해 파라미터 전달 받기
Map<String, ?> flashMap = RequestContextUtils.getInputFlashMap(request);
if(flashMap !=null) {
System.out.println((String)flashMap.get("message"));
model.addAttribute("message", (String)flashMap.get("message"));
}
return "uat/uia/EgovLoginUsr";
}
/**
* (사용자) 로그인 화면.
*
* @return String
* @exception Exception
*/
// @RequestMapping(value = "/web/user/login/login.do")
// public String userLogin(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap, HttpSession session) throws Exception {
// Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
// if (isAuthenticated)
// return "redirect:/web/main/mainPage.do";
//
// // 로그인필요 URL 호출하여 온경우
// String beforeUrl = (String) commandMap.get("beforeUrl");
// String message = (String) commandMap.get("message");
//
// // sns 회원가입 key 값 설정
// String naverClientId = itnNaverClientId;
// String naverClientSecret = itnNaverClientSecret;
//
// String kakaoRestApiKey = itnKakaoRestApiKey;
// String kakaoReturnUrl = itnKakaoReturnUrl;
//
// // config 정보 가져오기
// MberManageConfigVO mberConfigVO = new MberManageConfigVO();
//
// List<MberManageConfigVO> mberManageCnfVO = mberManageService.selectMberCnf(mberConfigVO);
//
// for (int i = 0; i < mberManageCnfVO.size(); i++) {
// if (mberManageCnfVO.get(i).getIsSns().equals("Y")) {
// if (mberManageCnfVO.get(i).getUseYn().equals("Y")) {
// if (mberManageCnfVO.get(i).getConfigId().equals("snsNaver")) {
// String redirectURI = URLEncoder.encode(itnNaverReturnUrl, "UTF-8");
// SecureRandom random = new SecureRandom();
// BigInteger state = new BigInteger(130, random);
// String naver_url = "https://nid.naver.com/oauth2.0/authorize?response_type=code";
// naver_url += "&client_id=" + itnNaverClientId;
// naver_url += "&redirect_url=" + redirectURI;
// naver_url += "&state=" + state;
// mberManageCnfVO.get(i).setSiteUrl(naver_url);
// mberManageCnfVO.get(i).setSiteIcon("/img/login_naver_icon.png");
//
// } else if (mberManageCnfVO.get(i).getConfigId().equals("snsKakao")) {
//
// String kakao_url = "https://kauth.kakao.com/oauth/authorize?response_type=code";
// kakao_url += "&client_id=" + kakaoRestApiKey;
// kakao_url += "&redirect_uri=" + kakaoReturnUrl;
// mberManageCnfVO.get(i).setSiteUrl(kakao_url);
// mberManageCnfVO.get(i).setSiteIcon("/img/login_kakao_icon.png");
//
// } else if (mberManageCnfVO.get(i).getConfigId().equals("snsGoogle")) {
//
// }
// }
// }
// }
// model.addAttribute("mberManageCnfVO", mberManageCnfVO);
// model.addAttribute("beforeUrl", beforeUrl);
// model.addAttribute("message", message);
//// initRsa(request);
// return "web/login/EgovLoginGnrlUsr";
// }
/**
* (사용자) SSO 로그인 화면.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/web/user/login/ssoLogin.do")
public String ssoLogin(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap, HttpSession session) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/web/main/mainPage.do";
// 로그인필요 URL 호출하여 온경우
String beforeUrl = (String) commandMap.get("beforeUrl");
String message = (String) commandMap.get("message");
String test = (String) commandMap.get("test");
// 실서버 적용시 바꾸기
String returnSiteUrl = returnSiteUrlGlobal;
String returnSiteCode = returnSiteCodeGlobal;
String idFindUrl = idFindUrl_Global;
String pwFindUrl = pwFindUrl_Global;
String joinUrl = joinUrl_Global;
model.addAttribute("returnSiteUrl", (URLEncoder.encode(returnSiteUrl)));
model.addAttribute("returnSiteCode", returnSiteCode);
model.addAttribute("idFindUrl", idFindUrl);
model.addAttribute("pwFindUrl", pwFindUrl);
model.addAttribute("joinUrl", joinUrl);
model.addAttribute("beforeUrl", beforeUrl);
model.addAttribute("message", message);
// initRsa(request);
if (test != null && test.equals("test")) {
return "web/kccadr/login/SsoLoginUsr3";
} else {
return "web/kccadr/login/SsoLoginUsr";
}
}
/**
* (사용자) SSO 소셜 로그인 화면.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/web/user/login/ssoLoginSns.do")
public String ssoLoginSns(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap, HttpSession session) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/web/main/mainPage.do";
// 로그인필요 URL 호출하여 온경우
String beforeUrl = (String) commandMap.get("beforeUrl");
String message = (String) commandMap.get("message");
String test = (String) commandMap.get("test");
// 실서버 적용시 바꾸기
String returnSiteUrl = returnSiteUrlGlobal;
String returnSiteCode = returnSiteCodeGlobal;
String idFindUrl = idFindUrl_Global;
String pwFindUrl = pwFindUrl_Global;
String joinUrl = joinUrl_Global;
model.addAttribute("returnSiteUrl", (URLEncoder.encode(returnSiteUrl)));
model.addAttribute("returnSiteCode", returnSiteCode);
model.addAttribute("beforeUrl", beforeUrl);
model.addAttribute("message", message);
return "web/kccadr/login/SsoLoginUsrSns";
}
@RequestMapping(value = "/web/user/login/ssoLogin3.do")
public String ssoLogin3(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap, HttpSession session) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/web/main/mainPage.do";
// 로그인필요 URL 호출하여 온경우
String beforeUrl = (String) commandMap.get("beforeUrl");
String message = (String) commandMap.get("message");
// 실서버 적용시 바꾸기
String returnSiteUrl = returnSiteUrlGlobal;
String returnSiteCode = returnSiteCodeGlobal;
model.addAttribute("returnSiteUrl", (URLEncoder.encode(returnSiteUrl)));
model.addAttribute("returnSiteCode", returnSiteCode);
model.addAttribute("beforeUrl", beforeUrl);
model.addAttribute("message", message);
// initRsa(request);
return "web/kccadr/login/ssoLogin3";
}
/**
* (사용자) 통합회원 회원탈퇴, 개인정보수정.
*
* @return String
* @exception Exception
*/
@SuppressWarnings("deprecation")
@RequestMapping(value = "/web/user/login/ssoUsrModify.do")
public String ssoUsrModify(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap, HttpSession session) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (!isAuthenticated)
return "redirect:/web/main/mainPage.do";
SsoLoginVO ssoLoginVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
// 실서버 적용시 바꾸기
/*String returnSiteUrl = "http://119.193.215.98:8081/web/user/login/ssoUsrModifyResult.do";*/
String returnSiteUrl = returnSiteUrlGlobal;
ssoLoginVO.setReturnSiteUrl(URLEncoder.encode(returnSiteUrl));
model.addAttribute("ssoLoginVO", ssoLoginVO);
return "web/kccadr/login/SsoUserModify";
}
/**
* (사용자) 통합회원 회원탈퇴, 개인정보수정.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/web/user/login/ssoUsrModifyResult.do")
public String ssoUsrModifyResult(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap, HttpSession session) throws Exception {
return "redirect:/";
}
/**
* (사용자) 외부 개발자용 세션등록 화면.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/web/user/login/ssoSession.do")
public String ssoSession(HttpServletRequest request, HttpServletResponse response, ModelMap model, HttpSession session) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (!isAuthenticated)
return "redirect:/web/main/mainPage.do";
SsoLoginVO ssoLoginVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
model.addAttribute("membSeq", ssoLoginVO.getMembSeq());
return "web/kccadr/login/SsoLoginSessionRegist";
}
/**
* (사용자) 외부 개발자용 세션등록.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/web/user/login/ssoSessionRegist.do")
public String ssoSessionRegist(@ModelAttribute("ssoLoginVO") SsoLoginVO ssoLoginVO, HttpServletRequest request, HttpServletResponse response, ModelMap model, HttpSession session)
throws Exception {
request.getSession().setAttribute("SSOLoginVO", ssoLoginVO);
return "redirect:/web/main/mainPage.do";
}
/**
* (관리자) 일반(스프링 시큐리티) 로그인을 처리한다(관리자)
*
* @param vo - 아이디, 비밀번호가 담긴 LoginVO
* @param request - 세션처리를 위한 HttpServletRequest
* @return result - 로그인결과(세션정보)
* @exception Exception
*/
@RequestMapping(value = "/uat/uia/actionSecurityLogin.do")
public String selectActionSecurityLogin(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session)
throws Exception {
Locale.setDefault(new Locale("ko", "Kr"));
// 로그인 정보 check
if (loginVO.getId() == null || loginVO.getPassword() == null) { // 로그인 최초 화면 로딩
return "uat/uia/EgovLoginUsr";
}
// 사용자일 경우 로그인 안되게
/*LoginVO loginInfo = loginService.getUserAuth(loginVO);
String s_loginInfo_getAuthority = "";
try {
s_loginInfo_getAuthority = loginInfo.getAuthority();
}catch(Exception ex) {
System.out.println(ex.getMessage());
}
*/
// 1. 로그인 처리
LoginVO resultVO = loginService.actionLogin(loginVO);
if (null == resultVO.getMemberId()) { // 로그인 실패
loginService.updatePassMissPlus(loginVO);
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsr";
}
/* if (null == resultVO.getId()) { // 로그인 실패
loginService.updatePassMissPlus(loginVO);
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsr";
} else {
if (resultVO.getPassMiss() > 10) {
model.addAttribute("message", "패스워드가 10회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다.");
return "uat/uia/EgovLoginUsr";
} else { // 초기화
loginService.updatePassMissReset(loginVO);
}
}*/
// 2. 허용IP조회
boolean loginPolicyYn = false;
HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
String userIp = EgovClntInfo.getClntIP(req);
/*
* 관리자 로그인 유형 추가_221011
* loginTypeCd
* 001 : IP제어
* 002 : OTP
* 1. IP제어 일 시 (001)
* 기존 IP제어 로직
* 2. OTP 일 시
*
* */
// IP 제어 로그인
if("001".equals(resultVO.getLoginTypeCd())) {
LoginPolicyVO loginPolicyVO = new LoginPolicyVO();
loginPolicyVO.setIpInfo(userIp);
boolean ipCheck = false;
List<LoginPolicyVO> loginPolicyGroupList = new ArrayList<LoginPolicyVO>();
loginPolicyGroupList = egovLoginPolicyService.selectLoginGroupPolicyAll(loginPolicyVO);
if (loginPolicyGroupList != null) {
for (LoginPolicyVO tempPolicyVO : loginPolicyGroupList) {
if (userIp.contains(tempPolicyVO.getIpInfo().trim())) {
ipCheck = true;
break;
}
}
}
if (!ipCheck) {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
// initRsa(request);
return "uat/uia/EgovLoginUsr";
}
}
// resultVO.siteId 의 각 로그인 ip를 조회함
// if (resultVO != null && resultVO.getId() != null &&
// !resultVO.getId().equals("") && loginPolicyYn) {
if (resultVO != null && resultVO.getMemberId() != null && !resultVO.getMemberId().equals("")) {
// 세션에다 ip 등록
resultVO.setIp(userIp);
// 2. spring security 연동
request.getSession().setAttribute("LoginVO", resultVO);
UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter();
ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
if (beans.size() > 0) {
springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
springSecurity.setUsernameParameter("egov_security_username");
springSecurity.setPasswordParameter("egov_security_password");
springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST"));
} else {
throw new IllegalStateException("No AuthenticationProcessingFilter");
}
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getMemberId(), resultVO.getMemberIdx()), response, null);
{ // 관리자 로그인 log 저장
String uniqId = "";
String ip = "";
/* Authenticated */
LoginLog loginLog = new LoginLog();
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated.booleanValue()) {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
uniqId = user.getUniqId();
ip = EgovClntInfo.getClntIP(request);
loginLog.setSiteId(user.getSiteId());
HttpSession httpSession = request.getSession(true);
{
/*List<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
SiteManagerVO siteManagerVO = new SiteManagerVO();
siteManagerVO.setFirstIndex(0);
siteManagerVO.setRecordCountPerPage(100);
siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
httpSession.setAttribute("siteManageList", siteManageList);*/
httpSession.setAttribute("adminId", user.getId());
httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해
httpSession.setAttribute("esntlId", user.getPassword());
/*AS-IS 분쟁조정 세션 추가*/
httpSession.setAttribute("memberIdx", user.getUniqId());
httpSession.setAttribute("memberId", user.getId());
httpSession.setAttribute("memberName", user.getName());
httpSession.setAttribute("memberDept", user.getMemberDept());
httpSession.setAttribute("memberPosition", user.getMemberPosition());
httpSession.setAttribute("memberTel", user.getMemberTel());
httpSession.setAttribute("memberPhone", user.getMemberPhone());
httpSession.setAttribute("memberEmail1", user.getMemberEmail1());
httpSession.setAttribute("memberEmail2", user.getMemberEmail2());
httpSession.setAttribute("memberGrant", user.getMemberGrant());
httpSession.setAttribute("enableDept", user.getEnableDept());
session.setAttribute("message", "common.message.login.success");
}
}
/*
* loginLog.setLoginId(uniqId); loginLog.setLoginIp(ip);
* loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O loginLog.setErrOccrrAt("N");
* loginLog.setErrorCode(""); //로그인은 관리자, PC만 됨 loginLog.setUserAt("A");
* loginLog.setDeviceType("P"); loginLog.setProgrmFileNm("adminLogin");
* loginLog.setMenuNm("관리자로그인"); loginLogService.logInsertLoginLog(loginLog);
*/
}
return "blank"; // 성공 시 페이지.. (redirect 불가)
// 개인키 삭제
// session.removeAttribute(EgovLoginController.RSA_WEB_KEY);
// return "blank"; // 성공 시 페이지.. (redirect 불가)
} else {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
// initRsa(request);
return "uat/uia/EgovLoginUsr";
}
}
/**
* (사용자) 일반(스프링 시큐리티) 로그인을 처리한다(SSO ID/PW를 통한 로그인 처리)
*
* @param vo - 아이디, 비밀번호가 담긴 LoginVO
* @param request - 세션처리를 위한 HttpServletRequest
* @return result - 로그인결과(세션정보)
* @exception Exception
*/
@RequestMapping(value = "/web/user/login/actionSecurityLogin.do")
public String selectActionSecurityLoginWeb(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session,
RedirectAttributes redirectAttributes) throws Exception {
ScriptEngineManager engine = new ScriptEngineManager();
// 로그인 정보 check
if (loginVO.getId() == null || loginVO.getPassword() == null) {
SsoLoginVO SsoLoginSessionChk = (SsoLoginVO) session.getAttribute("SSOLoginVO");
// SSOLoginVO 세션 체크
if (SsoLoginSessionChk != null) {
loginVO.setId(SsoLoginSessionChk.getMembId());
loginVO.setPassword("1");
} else {
model.addAttribute("message", "로그인을 다시 해주세요.");
// 로그인 페이지로 이동
/*return "/web/kccadr/login/SsoLoginUsr";*/
return "redirect:/web/user/login/ssoLogin.do";
}
}
SsoLoginVO ssologinVO = new SsoLoginVO();
if (ProfileUtil.isLocal() && "Y".equals(loginVO.getIsSelect())) { //비 sso login
loginVO.setPassword("1");
loginVO.setStatusAll("N");
ssologinVO.setMembSeq(loginVO.getId()); //중요
//loginVO = loginService.actionLogin(loginVO);
loginVO = loginService.actionLoginDev(loginVO); //개발자 아이디 선택 로그인시
//ssologinVO.setMembSeq(loginVO.getId()); //중요
//loginVO = loginService.actionLoginDev(loginVO); //개발자 아이디 선택 로그인시
//ssologinVO.setMembSeq(loginVO.getId()); //중요
ssologinVO.setMembId(loginVO.getEmail());
ssologinVO.setMembName(loginVO.getName());
ssologinVO.setSexCode("M");
ssologinVO.setMembEmail(loginVO.getEmail());
ssologinVO.setMembCelnum(loginVO.getMembCelnum());
ssologinVO.setMembBirth(loginVO.getMembBirth());
/*
* ssologinVO.setMembSmsRecpYn(loginVO.getMembSmsRecpYn());
* ssologinVO.setMembEmailRecpYn(loginVO.getMembEmailRecpYn());
*
* ssologinVO.setDispsettMembDivisCode(loginVO.getDispsettMembDivisCode());
* ssologinVO.setCorpnum(loginVO.getCorpnum());
* ssologinVO.setBuisnRegnum(loginVO.getBuisnRegnum());
* ssologinVO.setCompTitle(loginVO.getCompTitle());
*/
session.setAttribute("SSOLoginVO", ssologinVO);
} else { //sso login
ssologinVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
String SsoLoginResult = "";
if (ssologinVO == null) {
/* SSO로그인 및 SSOLoginVO 세선 생성 */
SsoLogin ssoLogin = new SsoLogin();
SsoLoginResult = ssoLogin.SsoLogin(loginVO.getId(), loginVO.getPassword(), request);
}
if ("fail".equals(SsoLoginResult)) {
/*redirectAttributes.addAttribute("message", "아이디 비밀번호를 확인해 주세요.");*/
redirectAttributes.addFlashAttribute("message", "아이디 비밀번호를 확인해 주세요.");
return "redirect:/web/user/login/ssoLogin.do";
}
}
ssologinVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
if ("".equals(ssologinVO.getDispsettMembDivisCode())) {
/* 분쟁조정 관련코드 받아오면 처리 */
System.out.println("조정분류코드 없음");
}
// 기존에 있던 회원이 아니면 DB에 일련번호 저장
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberSeq(ssologinVO.getMembSeq());
userManageVO = userManageService.selectKccadrUser(userManageVO);
if (null == userManageVO) {
UserManageVO tmpUserManageVO = new UserManageVO();
tmpUserManageVO.setMberSeq(ssologinVO.getMembSeq());
tmpUserManageVO.setAuthorCode("ROLE_USER_MEMBER");
String result = userManageService.insertUser(tmpUserManageVO);
userManageVO = userManageService.selectKccadrUser(tmpUserManageVO);
}
loginVO.setId(userManageVO.getEmplyrId());
loginVO.setPassword(userManageVO.getPassword());
/*
* ssoLoginVO에서 아이디와, 일련번호, 부가가입여부 체크해서 DB에 일치하는 정보가 있는지 체크하고 일치하면 통과, 없으면
* ssoLoginVO에서 일련번호, 부가가입여부를 포함한 사용자 정보 DB에 insert
*/
loginVO.setUserSe("GNR");
// 로그인 정보 check
/*
* if(loginVO.getId() == null || loginVO.getPassword() == null){ // 회원가입 시 로그인
* 처리 LoginVO pLoginVO = (LoginVO)request.getAttribute("pLoginVO"); if (pLoginVO
* == null) { // RSA 키 생성 initRsa(request); return
* "redirect:/web/user/login/login.do"; } else {
* loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword());
* loginVO.setBeforeUrl(pLoginVO.getBeforeUrl());
* loginVO.setMessage(pLoginVO.getMessage()); } }
*/
// 관리자 유무 체크
List<EgovMap> authorities = (List<EgovMap>) loginService.selectAuthorities(loginVO);
Boolean adminFlag = false;
for (EgovMap authority : authorities) {
// admin_auth_code 최하위 관리자 Roll 코드
if (authority.get("authorCode").equals(propertiesService.getString("admin_auth_code")))
adminFlag = true;
}
// 관리자 시 로그인 막기
if (adminFlag) {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
// RSA 키 생성
// initRsa(request);
return "web/site/login/EgovLoginGnrlUsr";
}
// 1. 일반 로그인 처리
LoginVO resultVO;
// 복호화
loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회
/* loginVO.setUserSe("GNR"); */
resultVO = loginService.actionLogin(loginVO);
// 로그인 시 권한조회
resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority());
String alertMessage = "";
if (!"admin".equals(loginVO.getId())) {
if (null == resultVO.getId()) { // 로그인 실패
/* loginService.updatePassMissPlus(loginVO); */
alertMessage = egovMessageSource.getMessage("fail.common.login");
// 로그인 실패이면 메인페이지로 이동
return goUserLoginPage(redirectAttributes, request, model, alertMessage);
} /*
* else{ if(resultVO.getPassMiss() > 5) { alertMessage =
* "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다."; return
* goUserLoginPage(redirectAttributes, request, model, alertMessage); }else
* if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage =
* "신청하신 아이디가 현제 승인대기 상태입니다."; return goUserLoginPage(redirectAttributes,
* request, model, alertMessage); }else
* if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage =
* "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes,
* request, model, alertMessage); } loginService.updatePassMissReset(loginVO); }
*/
}
boolean loginPolicyYn = true;
// 접속IP
String userIp = EgovClntInfo.getClntIP(request);
// resultVO.siteId 의 각 로그인 ip를 조회함
if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) {
// 세션에다 ip 등록
resultVO.setIp(userIp);
// LoginVO세션에 사용자 정보 넣기
resultVO.setMembSeq(ssologinVO.getMembSeq());
resultVO.setMembId(ssologinVO.getMembId());
resultVO.setMembName(ssologinVO.getMembName());
resultVO.setMembSeq(ssologinVO.getMembSeq());
resultVO.setMembCi(ssologinVO.getMembCi());
resultVO.setMembEmail(ssologinVO.getMembEmail());
resultVO.setMembCelnum(ssologinVO.getMembCelnum());
resultVO.setMembBirth(ssologinVO.getMembBirth());
resultVO.setMembSmsRecpYn(ssologinVO.getMembSmsRecpYn());
resultVO.setMembEmailRecpYn(ssologinVO.getMembEmailRecpYn());
resultVO.setSexCode(ssologinVO.getSexCode());
resultVO.setDispsettMembDivisCode(ssologinVO.getDispsettMembDivisCode());
resultVO.setCorpnum(ssologinVO.getCorpnum());
resultVO.setBuisnRegnum(ssologinVO.getBuisnRegnum());
resultVO.setCompTitle(ssologinVO.getCompTitle());
// 2. spring security 연동
request.getSession().setAttribute("LoginVO", resultVO); // LoginVO세션 생성
UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter();
ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
if (beans.size() > 0) {
springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
springSecurity.setUsernameParameter("egov_security_username");
springSecurity.setPasswordParameter("egov_security_password");
springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST"));
} else {
throw new IllegalStateException("No AuthenticationProcessingFilter");
}
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null);
{ // 관리자 로그인 log 저장
String uniqId = "";
String ip = "";
/* Authenticated */
LoginLog loginLog = new LoginLog();
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated.booleanValue()) {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
uniqId = user.getUniqId();
ip = EgovClntInfo.getClntIP(request);
HttpSession httpSession = request.getSession(true);
{
List<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
SiteManagerVO siteManagerVO = new SiteManagerVO();
siteManagerVO.setFirstIndex(0);
siteManagerVO.setRecordCountPerPage(100);
siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
httpSession.setAttribute("siteManageList", siteManageList);
httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해
httpSession.setAttribute("esntlId", user.getPassword());
// 최근검색어 조회 후 세션에 넣어줌
/*
* UserManageVO tempUserManageVO = new UserManageVO();
* tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO =
* userManageService.selectRecentSearchWord(tempUserManageVO);
*
* List<String> lisRecentSearch = new ArrayList<String>(); if(null !=
* tempUserManageVO){ //ArrayList 로 세션 저장
* Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split(","
* )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ;
*/
}
}
loginLog.setLoginId(uniqId);
loginLog.setLoginIp(ip);
loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
loginLog.setErrOccrrAt("N");
loginLog.setErrorCode("");
// 로그인은 관리자, PC만 됨
loginLog.setUserAt("U"); // 사용자
loginLog.setDeviceType("P"); // PC
loginLog.setProgrmFileNm("adminLogin");
loginLog.setMenuNm("관리자로그인");
//loginLogService.logInsertLoginLog(loginLog); //사용자 페이지의 로그만 남김(메뉴에 등록된 페이지만 남김)
loginLogService.logInsertUsrLoginLog(loginLog); // 전자조정 사용자 페이지의 로그인 로그(메뉴와별개) table : adr_usr_login_log
}
// 로그인 전 URL 호출 시
if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) {
request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl());
// 회원가입 시 메세지 처리
if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) {
request.getSession().setAttribute("registMessage", loginVO.getMessage());
}
}
// 개인키 삭제
// 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다.
request.getSession().setAttribute("pageType", "web");
return "blank"; // 성공 시 페이지.. (redirect 불가)
} else {
String message = egovMessageSource.getMessage("fail.common.login");
redirectAttributes.addAttribute("beforeUrl", loginVO.getBeforeUrl());
redirectAttributes.addAttribute("message", message);
return "redirect:/web/user/login/login.do";
}
}
/**
* (사용자) 일반(스프링 시큐리티) 로그인을 처리한다(SSO Token를 통한 로그인 처리) 통합회원 SSO 로그인 후 전자조정시스템 배너
* 클릭으로 로그인
*
* @param vo - 아이디, 비밀번호가 담긴 LoginVO
* @param request - 세션처리를 위한 HttpServletRequest
* @return result - 로그인결과(세션정보)
* @exception Exception
*/
/* @RequestMapping(value = "/web/user/login/actionSecurityLoginToken.do") */
@RequestMapping(value = "/kccadr/ssoLogin.do")
public String selectActionSecurityLoginTokenWeb(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session,
RedirectAttributes redirectAttributes) throws Exception {
ScriptEngineManager engine = new ScriptEngineManager();
SsoLoginVO ssologinVO = new SsoLoginVO();
ssologinVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
String SsoLoginResult = "";
if(
request.getParameter("accessToken") == null
|| request.getParameter("refreshToken") == null) {
System.out.println("토큰값 없음.");
return "redirect:/";
}
if (ssologinVO == null) {
/* SSO로그인 및 SSOLoginVO 세선 생성 */
SsoLoginVO tmpssologinVO = new SsoLoginVO();
tmpssologinVO.setAccess_token(request.getParameter("accessToken"));
tmpssologinVO.setRefresh_token(request.getParameter("refreshToken"));
SsoLoginResult = SsoTokenLogin.SsoTokenLogin(tmpssologinVO.getAccess_token(), tmpssologinVO.getRefresh_token(), request);
}
if ("fail".equals(SsoLoginResult)) {
model.addAttribute("message", "아이디, 비밀번호를 확인해 주세요.");
return "redirect:/web/user/login/ssoLogin.do";
}
ssologinVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
if ("".equals(ssologinVO.getDispsettMembDivisCode())) {
/* 분쟁조정 관련코드 받아오면 처리 */
}
// 기존에 있던 회원이 아니면 DB에 일련번호 저장
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberSeq(ssologinVO.getMembSeq());
userManageVO = userManageService.selectKccadrUser(userManageVO);
if (null == userManageVO) {
UserManageVO tmpUserManageVO = new UserManageVO();
tmpUserManageVO.setMberSeq(ssologinVO.getMembSeq());
tmpUserManageVO.setAuthorCode("ROLE_USER_MEMBER");
String result = userManageService.insertUser(tmpUserManageVO);
userManageVO = userManageService.selectKccadrUser(tmpUserManageVO);
}
loginVO.setId(userManageVO.getEmplyrId());
loginVO.setPassword(userManageVO.getPassword());
/*
* ssoLoginVO에서 아이디와, 일련번호, 부가가입여부 체크해서 DB에 일치하는 정보가 있는지 체크하고 일치하면 통과, 없으면
* ssoLoginVO에서 일련번호, 부가가입여부를 포함한 사용자 정보 DB에 insert
*/
loginVO.setUserSe("GNR");
// 로그인 정보 check
/*
* if(loginVO.getId() == null || loginVO.getPassword() == null){ // 회원가입 시 로그인
* 처리 LoginVO pLoginVO = (LoginVO)request.getAttribute("pLoginVO"); if (pLoginVO
* == null) { // RSA 키 생성 initRsa(request); return
* "redirect:/web/user/login/login.do"; } else {
* loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword());
* loginVO.setBeforeUrl(pLoginVO.getBeforeUrl());
* loginVO.setMessage(pLoginVO.getMessage()); } }
*/
// 관리자 유무 체크
List<EgovMap> authorities = (List<EgovMap>) loginService.selectAuthorities(loginVO);
Boolean adminFlag = false;
for (EgovMap authority : authorities) {
// admin_auth_code 최하위 관리자 Roll 코드
if (authority.get("authorCode").equals(propertiesService.getString("admin_auth_code")))
adminFlag = true;
}
// 관리자 시 로그인 막기
if (adminFlag) {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
// RSA 키 생성
// initRsa(request);
return "web/site/login/EgovLoginGnrlUsr";
}
// 1. 일반 로그인 처리
LoginVO resultVO;
loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회
resultVO = loginService.actionLogin(loginVO);
// 로그인 시 권한조회
resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority());
String alertMessage = "";
if (!"admin".equals(loginVO.getId())) {
if (null == resultVO.getId()) { // 로그인 실패
/* loginService.updatePassMissPlus(loginVO); */
alertMessage = egovMessageSource.getMessage("fail.common.login");
// 로그인 실패이면 메인페이지로 이동
return goUserLoginPage(redirectAttributes, request, model, alertMessage);
} /*
* else{ if(resultVO.getPassMiss() > 5) { alertMessage =
* "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다."; return
* goUserLoginPage(redirectAttributes, request, model, alertMessage); }else
* if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage =
* "신청하신 아이디가 현제 승인대기 상태입니다."; return goUserLoginPage(redirectAttributes,
* request, model, alertMessage); }else
* if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage =
* "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes,
* request, model, alertMessage); } loginService.updatePassMissReset(loginVO); }
*/
}
boolean loginPolicyYn = true;
// 접속IP
String userIp = EgovClntInfo.getClntIP(request);
// resultVO.siteId 의 각 로그인 ip를 조회함
if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) {
// 세션에다 ip 등록
resultVO.setIp(userIp);
// LoginVO세션에 사용자 정보 넣기
resultVO.setMembSeq(ssologinVO.getMembSeq());
resultVO.setMembId(ssologinVO.getMembId());
resultVO.setMembName(ssologinVO.getMembName());
resultVO.setMembSeq(ssologinVO.getMembSeq());
resultVO.setMembCi(ssologinVO.getMembCi());
resultVO.setMembEmail(ssologinVO.getMembEmail());
resultVO.setMembCelnum(ssologinVO.getMembCelnum());
resultVO.setMembBirth(ssologinVO.getMembBirth());
resultVO.setMembSmsRecpYn(ssologinVO.getMembSmsRecpYn());
resultVO.setMembEmailRecpYn(ssologinVO.getMembEmailRecpYn());
resultVO.setSexCode(ssologinVO.getSexCode());
resultVO.setDispsettMembDivisCode(ssologinVO.getDispsettMembDivisCode());
resultVO.setCorpnum(ssologinVO.getCorpnum());
resultVO.setBuisnRegnum(ssologinVO.getBuisnRegnum());
resultVO.setCompTitle(ssologinVO.getCompTitle());
// 2. spring security 연동
request.getSession().setAttribute("LoginVO", resultVO); // LoginVO세션 생성
UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter();
ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
if (beans.size() > 0) {
springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
springSecurity.setUsernameParameter("egov_security_username");
springSecurity.setPasswordParameter("egov_security_password");
springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST"));
} else {
throw new IllegalStateException("No AuthenticationProcessingFilter");
}
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null);
{ // 관리자 로그인 log 저장
String uniqId = "";
String ip = "";
/* Authenticated */
LoginLog loginLog = new LoginLog();
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated.booleanValue()) {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
uniqId = user.getUniqId();
ip = EgovClntInfo.getClntIP(request);
HttpSession httpSession = request.getSession(true);
{
List<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
SiteManagerVO siteManagerVO = new SiteManagerVO();
siteManagerVO.setFirstIndex(0);
siteManagerVO.setRecordCountPerPage(100);
siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
httpSession.setAttribute("siteManageList", siteManageList);
httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해
httpSession.setAttribute("esntlId", user.getPassword());
// 최근검색어 조회 후 세션에 넣어줌
/*
* UserManageVO tempUserManageVO = new UserManageVO();
* tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO =
* userManageService.selectRecentSearchWord(tempUserManageVO);
*
* List<String> lisRecentSearch = new ArrayList<String>(); if(null !=
* tempUserManageVO){ //ArrayList 로 세션 저장
* Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split(","
* )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ;
*/
}
}
loginLog.setLoginId(uniqId);
loginLog.setLoginIp(ip);
loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
loginLog.setErrOccrrAt("N");
loginLog.setErrorCode("");
// 로그인은 관리자, PC만 됨
loginLog.setUserAt("U"); // 사용자
loginLog.setDeviceType("P"); // PC
loginLog.setProgrmFileNm("adminLogin");
loginLog.setMenuNm("관리자로그인");
loginLogService.logInsertLoginLog(loginLog);
}
// 로그인 전 URL 호출 시
if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) {
request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl());
// 회원가입 시 메세지 처리
if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) {
request.getSession().setAttribute("registMessage", loginVO.getMessage());
}
}
// 개인키 삭제
// 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다.
request.getSession().setAttribute("pageType", "web");
return "blank"; // 성공 시 페이지.. (redirect 불가)
} else {
String message = egovMessageSource.getMessage("fail.common.login");
redirectAttributes.addAttribute("beforeUrl", loginVO.getBeforeUrl());
redirectAttributes.addAttribute("message", message);
return "redirect:/web/user/login/login.do";
}
}
/**
* (사용자) 외부 개발자용 로그인 처리 일반(스프링 시큐리티) 로그인을 처리한다
*
* @param vo - 아이디, 비밀번호가 담긴 LoginVO
* @param request - 세션처리를 위한 HttpServletRequest
* @return result - 로그인결과(세션정보)
* @exception Exception
*/
@RequestMapping(value = "/web/user/login/actionSecurityLogin2.do")
public String selectActionSecurityLoginWeb2(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session,
RedirectAttributes redirectAttributes) throws Exception {
ScriptEngineManager engine = new ScriptEngineManager();
/*
* //로그인 정보 check if(loginVO.getId() == null || loginVO.getPassword() == null){
* SsoLoginVO SsoLoginSessionChk =
* (SsoLoginVO)session.getAttribute("SSOLoginVO"); //SSOLoginVO 세션 체크
* if(SsoLoginSessionChk != null) {
*
* loginVO.setId(SsoLoginSessionChk.getMembId()); loginVO.setPassword("1");
* }else { model.addAttribute("message", "로그인을 다시 해주세요."); //로그인 페이지로 이동 return
* "/web/kccadr/login/SsoLoginUsr"; } }
*
* SsoLoginVO ssologinVO = new SsoLoginVO(); ssologinVO =
* (SsoLoginVO)session.getAttribute("SSOLoginVO"); String SsoLoginResult = "";
* if(ssologinVO == null) { SSO로그인 및 SSOLoginVO 세선 생성 SsoLogin ssoLogin = new
* SsoLogin(); SsoLoginResult = ssoLogin.SsoLogin(loginVO.getId(),
* loginVO.getPassword(), request); } if("fail".equals(SsoLoginResult)) {
* model.addAttribute("message", "아이디, 비밀번호를 확인해 주세요."); return
* "/web/user/login/ssoLogin.do"; }
*
* ssologinVO = (SsoLoginVO)session.getAttribute("SSOLoginVO");
*
* if("".equals(ssologinVO.getDispsettMembDivisCode())) { 분쟁조정 관련코드 받아오면 처리 }
*/
// 기존에 있던 회원이 아니면 DB에 일련번호 저장
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberSeq(loginVO.getMembSeq());
userManageVO = userManageService.selectKccadrUser(userManageVO);
SsoLoginVO ssoLoginVO = new SsoLoginVO();
ssoLoginVO.setOtherUser("Y");
ssoLoginVO.setMembSeq(userManageVO.getMberSeq());
request.getSession().setAttribute("SSOLoginVO", ssoLoginVO);
loginVO.setId(userManageVO.getEmplyrId());
loginVO.setPassword(userManageVO.getPassword());
/*
* ssoLoginVO에서 아이디와, 일련번호, 부가가입여부 체크해서 DB에 일치하는 정보가 있는지 체크하고 일치하면 통과, 없으면
* ssoLoginVO에서 일련번호, 부가가입여부를 포함한 사용자 정보 DB에 insert
*/
loginVO.setUserSe("GNR");
// 로그인 정보 check
/*
* if(loginVO.getId() == null || loginVO.getPassword() == null){ // 회원가입 시 로그인
* 처리 LoginVO pLoginVO = (LoginVO)request.getAttribute("pLoginVO"); if (pLoginVO
* == null) { // RSA 키 생성 initRsa(request); return
* "redirect:/web/user/login/login.do"; } else {
* loginVO.setId(pLoginVO.getId()); loginVO.setPassword(pLoginVO.getPassword());
* loginVO.setBeforeUrl(pLoginVO.getBeforeUrl());
* loginVO.setMessage(pLoginVO.getMessage()); } }
*/
// 관리자 유무 체크
List<EgovMap> authorities = (List<EgovMap>) loginService.selectAuthorities(loginVO);
Boolean adminFlag = false;
for (EgovMap authority : authorities) {
// admin_auth_code 최하위 관리자 Roll 코드
if (authority.get("authorCode").equals(propertiesService.getString("admin_auth_code")))
adminFlag = true;
}
// 관리자 시 로그인 막기
if (adminFlag) {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
// RSA 키 생성
// initRsa(request);
return "web/site/login/EgovLoginGnrlUsr";
}
// 1. 일반 로그인 처리
LoginVO resultVO;
String password = loginVO.getPassword();
loginVO.setId(loginVO.getId());
loginVO.setPassword(password);
loginVO.setStatusAll("Y"); // 신청대기중인 사용자까지 조회
/* loginVO.setUserSe("GNR"); */
resultVO = loginService.actionLogin(loginVO);
// 로그인 시 권한조회
resultVO.setAuthority(loginService.getUserAuth(resultVO).getAuthority());
String alertMessage = "";
if (!"admin".equals(loginVO.getId())) {
if (null == resultVO.getId()) { // 로그인 실패
/* loginService.updatePassMissPlus(loginVO); */
alertMessage = egovMessageSource.getMessage("fail.common.login");
// 로그인 실패이면 메인페이지로 이동
return goUserLoginPage(redirectAttributes, request, model, alertMessage);
} /*
* else{ if(resultVO.getPassMiss() > 5) { alertMessage =
* "패스워드가 5회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다."; return
* goUserLoginPage(redirectAttributes, request, model, alertMessage); }else
* if("A".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage =
* "신청하신 아이디가 현제 승인대기 상태입니다."; return goUserLoginPage(redirectAttributes,
* request, model, alertMessage); }else
* if("B".equals(resultVO.getEmplyrSttusCode())){ //신청상태 alertMessage =
* "아이디가 차단상태가 되어 사용할수 없습니다."; return goUserLoginPage(redirectAttributes,
* request, model, alertMessage); } loginService.updatePassMissReset(loginVO); }
*/
}
boolean loginPolicyYn = true;
// 접속IP
String userIp = EgovClntInfo.getClntIP(request);
// resultVO.siteId 의 각 로그인 ip를 조회함
if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("") && loginPolicyYn) {
// 세션에다 ip 등록
resultVO.setIp(userIp);
// 2. spring security 연동
request.getSession().setAttribute("LoginVO", resultVO); // LoginVO세션 생성
UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter();
ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
if (beans.size() > 0) {
springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
springSecurity.setUsernameParameter("egov_security_username");
springSecurity.setPasswordParameter("egov_security_password");
springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST"));
} else {
throw new IllegalStateException("No AuthenticationProcessingFilter");
}
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null);
{ // 관리자 로그인 log 저장
String uniqId = "";
String ip = "";
/* Authenticated */
LoginLog loginLog = new LoginLog();
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated.booleanValue()) {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
uniqId = user.getUniqId();
ip = EgovClntInfo.getClntIP(request);
HttpSession httpSession = request.getSession(true);
{
List<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
SiteManagerVO siteManagerVO = new SiteManagerVO();
siteManagerVO.setFirstIndex(0);
siteManagerVO.setRecordCountPerPage(100);
siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
httpSession.setAttribute("siteManageList", siteManageList);
httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해
httpSession.setAttribute("esntlId", user.getPassword());
// 최근검색어 조회 후 세션에 넣어줌
/*
* UserManageVO tempUserManageVO = new UserManageVO();
* tempUserManageVO.setEmplyrId(user.getId()); tempUserManageVO =
* userManageService.selectRecentSearchWord(tempUserManageVO);
*
* List<String> lisRecentSearch = new ArrayList<String>(); if(null !=
* tempUserManageVO){ //ArrayList 로 세션 저장
* Collections.addAll(lisRecentSearch,tempUserManageVO.getSearchWord().split(","
* )) ; } httpSession.setAttribute("recentSearch", lisRecentSearch) ;
*/
}
}
loginLog.setLoginId(uniqId);
loginLog.setLoginIp(ip);
loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
loginLog.setErrOccrrAt("N");
loginLog.setErrorCode("");
// 로그인은 관리자, PC만 됨
loginLog.setUserAt("U"); // 사용자
loginLog.setDeviceType("P"); // PC
loginLog.setProgrmFileNm("adminLogin");
loginLog.setMenuNm("관리자로그인");
loginLogService.logInsertLoginLog(loginLog);
}
// 로그인 전 URL 호출 시
if (loginVO.getBeforeUrl() != null && !("").equals(loginVO.getBeforeUrl())) {
request.getSession().setAttribute("usrBeforeUrl", loginVO.getBeforeUrl());
// 회원가입 시 메세지 처리
if (loginVO.getMessage() != null && !("").equals(loginVO.getMessage())) {
request.getSession().setAttribute("registMessage", loginVO.getMessage());
}
}
// 개인키 삭제
// 성공시 웹페이지 분기로 인해 session에 페이지 타입을 넣어준다.
request.getSession().setAttribute("pageType", "web");
return "blank"; // 성공 시 페이지.. (redirect 불가)
} else {
String message = egovMessageSource.getMessage("fail.common.login");
redirectAttributes.addAttribute("beforeUrl", loginVO.getBeforeUrl());
redirectAttributes.addAttribute("message", message);
return "redirect:/web/user/login/login.do";
}
}
/**
* 로그인 후 메인화면으로 들어간다
*
* @param
* @return 로그인 페이지
* @exception Exception
*/
@RequestMapping(value = "/uat/uia/actionMain.do")
public String actionMain(HttpServletResponse response, HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes, HttpSession session) throws Exception {
/*
* 1.로그인 성공시 메소드 호출(사용자/관리자 모두) 2.권한없는 페이지 호출시 메소드 호출됨 3.사용자 화면에서 권한 없어도 무조건
* 이쪽으로 redirect됨(여기서 분기처리요망)
*/
// initial target url. 첫 호출 URL
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); // 사용자 최종 클릭 화면
if (savedRequest != null) { // 권한업는 페이지 호출시 호출한 페이지 분기를 위해
if (savedRequest.getRedirectUrl().contains("web")) { // 사용자페이지에서 옴
session.setAttribute("pageType", "web");
} else {
session.setAttribute("pageType", "admin");
}
}
// 1. Spring Security 사용자권한 처리
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (!isAuthenticated) { // 로그인이 안되었을경우
if (session.getAttribute("pageType") != null) { // 사용자 로그인 추가
if ("web".equals((String) session.getAttribute("pageType"))) {
// pageType(Web은 사용자 이외는 관리자)
if (savedRequest != null) {
// session.setAttribute("beforeUrl", savedRequest.getRedirectUrl());
//서버정보 받아오기
String scheme = request.getScheme();
String serverName = request.getServerName();
String serverPort = String.valueOf(request.getServerPort());
if(!"".equals(serverPort)) serverPort = ":" + serverPort;
String requestUrl = scheme + "://" + serverName + serverPort;
String beforeUrl = savedRequest
.getRedirectUrl()
.toString()
.substring(savedRequest
.getRedirectUrl()
.toString()
.indexOf("/",8),
savedRequest
.getRedirectUrl()
.toString()
.length()
);
if("real".equals(islocal)) {
session.setAttribute("beforeUrl", "https://adr.copyright.or.kr"+beforeUrl);
}else {
session.setAttribute("beforeUrl", requestUrl+beforeUrl);
}
/* return "redirect:/web/user/login/login.do"; */
redirectAttributes.addFlashAttribute("message", "로그인 후 이용해 주세요.");
return "redirect:/web/user/login/ssoLogin.do";
}
} else {
return "redirect:/uat/uia/EgovLoginUsr.do";
}
}
return "forward:/uat/uia/EgovLoginUsr.do"; // 로그아웃 경우(사용자는 uat/uia/actionMain.do 사용안함)
}
// 외부 개발자 판단 여부
SsoLoginVO ssoLoginVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
if (ssoLoginVO != null && "Y".equals(ssoLoginVO.getOtherUser())) {
return "redirect:/web/user/login/ssoSession.do";
}
if (session.getAttribute("pageType") != null) {
if ("web".equals((String) session.getAttribute("pageType"))) { // 사용자
if (session.getAttribute("beforeUrl") != null) { // 사용자 메인
String tempSessionUrl = (String) session.getAttribute("beforeUrl");
session.setAttribute("pageType", null);
/*return "redirect:" + tempSessionUrl;*/
return "redirect:/";
} else {
session.setAttribute("pageType", null);
return "redirect:/web/main/mainPage.do";
}
}
}
// 관리자 로그인 시
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
//String author = loginService.getUserAuth(user).getAuthority();
String author = user.getAuthority();
if ("ROLE_ADMIN".equals(author)
|| "ROLE_ADR_ADMIN".equals(author)) { // 수퍼관리자 경우
return "redirect:/cmm/main/mainPage.do";
} else if ("ROLE_USER_MANAGER".equals(user.getAuthority())) {
return "redirect:/web/main/mainPage.do";
} else if ("past_author".equals(user.getAuthority())) {
return "redirect:/kccadr/adjReqMgOff/adjReqMgrPastList.do";
} else if ("ROLE_COURT_ADMIN".equals(user.getAuthority())) {
return "redirect:/kccadr/adjCourtCnctn/adjCourtCnctnList.do";
}
else { // 일반관리자 경우
return "redirect:/cmm/main/mainPage.do";
}
}
/**
* (관리자)로그아웃한다.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/uat/uia/actionLogout.do")
public String selectActionLogout(HttpServletRequest request, ModelMap model, HttpServletResponse response) throws Exception {
request.getSession().invalidate();
return "redirect:/uat/uia/EgovLoginUsr.do";
}
@RequestMapping(value = "/uat/uia/actionLogoutCourt.do")
public String selectActionLogoutCourt(HttpServletRequest request, ModelMap model, HttpServletResponse response) throws Exception {
request.getSession().invalidate();
return "redirect:/uat/uia/EgovLoginCourt.do";
}
/**
* (사용자)로그아웃한다.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/web/uat/uia/actionLogout.do")
public String selectActionLogoutWeb(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
SsoAgentInfo ssoagentinfo = new SsoAgentInfo();
String client_ip = "127.0.0.1";
if (!ProfileUtil.isLocal()) {
// SsoLoginVO 세션 정보 취득
SsoLoginVO ssoLoginVO = new SsoLoginVO();
HttpSession session = request.getSession();
ssoLoginVO = (SsoLoginVO) session.getAttribute("SSOLoginVO");
if (ssoLoginVO != null) {
if (!"USRCNFRM_00000002940".equals(ssoLoginVO.getMembId()) || !"USRCNFRM_00000002941".equals(ssoLoginVO.getMembId()) || !"USRCNFRM_00000002942".equals(ssoLoginVO.getMembId())
|| !"USRCNFRM_00000002943".equals(ssoLoginVO.getMembId()) || !"USRCNFRM_00000002944".equals(ssoLoginVO.getMembId()) || !"USRCNFRM_00000002550".equals(ssoLoginVO.getMembId())
|| !"USRCNFRM_00000002542".equals(ssoLoginVO.getMembId()) || !"USRCNFRM_00000002541".equals(ssoLoginVO.getMembId()) || !"USRCNFRM_00000002540".equals(ssoLoginVO.getMembId())
|| !"USRCNFRM_00000002533".equals(ssoLoginVO.getMembId())) {
/*BandiSSOAgent agent = new BandiSSOAgent(ssoUri, clientId, clientSecret, scope);*/
BandiSSOAgent agent = new BandiSSOAgent(ssoagentinfo.getSsoUri(), ssoagentinfo.getClientId(), ssoagentinfo.getClientSecret(), ssoagentinfo.getScope());
// sso 로그아웃
agent.logout(ssoLoginVO.getAccess_token(), client_ip);
}
}
}
// Spring Security 로그아웃
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
new SecurityContextLogoutHandler().logout(request, response, auth);
}
// 세션 제거
request.getSession().invalidate();
return "redirect:/web/main/mainPage.do";
}
/* 캡차 테스트 */
@RequestMapping(value = "/captcha/captchaTest.do")
public String captchaTest(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, ModelMap model) throws Exception {
return "cmm/chptcha/captchaTest";
}
/* 캡차 이미지 */
@RequestMapping(value = "/captcha/captchaImg.do")
public String captchaImg1(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
return "cmm/chptcha/captchaImg";
}
/* 캡차 오디오 */
@RequestMapping(value = "/captcha/captchaAudio.do")
public String captchaAudio1(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
return "cmm/chptcha/captchaAudio";
}
/* 캡차 submit */
@RequestMapping(value = "/captcha/captchaSubmit.do")
public ModelAndView captchaSubmit(@RequestParam Map<String, Object> commandMap, HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
String answer = (String) commandMap.get("answer");
String captcha = (String) request.getSession().getAttribute("captcha");
String message = "캡차 입력값이 일치하지 않습니다.";
if (answer != null && !"".equals(answer)) {
if (answer.equals(captcha)) {
message = "캡차 입력값이 일치합니다.";
}
}
modelAndView.addObject("message", message);
return modelAndView;
}
/* 캡차 이미지 */
@RequestMapping(value = "captchaImg.do")
public void cpatchaImg(HttpServletRequest request, HttpServletResponse response) throws Exception {
new CaptchaUtil().captchaImg(request, response);
}
@RequestMapping(value = "captchaAudio.do")
public void cpatchaAudio(HttpServletRequest request, HttpServletResponse response) throws Exception {
new CaptchaUtil().captchaAudio(request, response);
}
/**
* 로그인 후 메인화면으로 들어간다
*
* @param
* @return 로그인 페이지
* @exception Exception
*/
@RequestMapping(value = "/{siteId}/web/actionLoign.do")
public String siteActionMain(@PathVariable("siteId") String siteId, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session) throws Exception {
// initial target url. 첫 호출 URL
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
String initialTargetUrl = "";
if (savedRequest != null) {
initialTargetUrl = savedRequest.getRedirectUrl();
}
model.addAttribute("siteId", siteId);
String siteFolder = "site/" + siteId;
// 1. Spring Security 사용자권한 처리
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (!isAuthenticated) {
// model.addAttribute("message",
// egovMessageSource.getMessage("fail.common.login"));
if ("linc".equals(siteId) || "klc".equals(siteId)) {
return "web/" + siteFolder + "/main/MemberLogin";
} else {
SiteManagerVO siteManagerVO = new SiteManagerVO();
siteManagerVO.setSiteId(siteId);
setSiteinfo(siteManagerVO, model, request);
// return
// "web/site/theme_"+siteManagerVO.getTheme()+"/"+siteManagerVO.getIsMobile()+"/main/MemberLogin";
return "web/site/" + siteId + "/" + siteManagerVO.getIsMobile() + "/main/MemberLogin";
}
}
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
if (null != loginVO && !"super".equals(loginVO.getSiteId())) { // 리스트, 수정, 입력
if (siteId.equals(loginVO.getSiteId())) { // 사이트 아이디가 다르면
session.setAttribute("pageType", "web");
return "web/" + siteFolder + "/main/MemberLogin";
}
}
// 2. 메인 페이지 이동
return "forward:/" + siteId + "/web/main/mainPage.do";
}
/**
* 일반사용자 (스프링 시큐리티) 로그인을 처리한다
*
* @param vo - 아이디, 비밀번호가 담긴 LoginVO
* @param request - 세션처리를 위한 HttpServletRequest
* @return result - 로그인결과(세션정보)
* @exception Exception
*/
@RequestMapping(value = "/{siteId}/web/actionSecurityLogin.do")
public String selectActionSiteSecurityLogin(@PathVariable("siteId") String siteId, @ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request,
ModelMap model) throws Exception {
// 로그인 정보 check
model.addAttribute("siteId", siteId);
String siteFolder = "site/" + siteId;
if (loginVO.getId() == null || loginVO.getPassword() == null) {
return "web/" + siteFolder + "/main/MemberLogin";
}
// 1. 일반 로그인 처리(사이트)
LoginVO resultVO = loginService.siteActionLogin(loginVO);
// 접속IP
String userIp = EgovClntInfo.getClntIP(request);
if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("")) {
// 세션에다 ip 등록
resultVO.setIp(userIp);
// 2. spring security 연동
request.getSession().setAttribute("LoginVO", resultVO);
request.getSession().setAttribute("pageType", "web");
UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter();
ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
if (beans.size() > 0) {
springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
springSecurity.setUsernameParameter("egov_security_username");
springSecurity.setPasswordParameter("egov_security_password");
springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST"));
} else {
throw new IllegalStateException("No AuthenticationProcessingFilter");
}
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null);
return "blank"; // action.do 에서 일반사용자 분기처리
} else {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "web/" + siteFolder + "/main/MemberLogin";
}
}
/**
* (사용자) 아이디 찾기.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/{siteId}/web/user/findUserId.do")
public String findUserId(@PathVariable("siteId") String siteId, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/{siteId}/web/main/mainPage.do";
return "web/site/kcc/login/findUserId";
}
/**
* (사용자) 비밀번호 찾기.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/{siteId}/web/user/findPassword.do")
public String findPassword(@PathVariable("siteId") String siteId, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/{siteId}/web/main/mainPage.do";
return "web/site/kcc/login/findPassword";
}
/**
* (사용자) 아이디 비밀번호 안내.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/{siteId}/web/user/findView.do")
public String findView(@PathVariable("siteId") String siteId, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/cmm/main/mainPage.do";
return "web/site/kcc/login/findView";
}
/**
* (사용자) 비밀번호 변경 화면.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/{siteId}/web/user/changePassword.do")
public String changePassword(@PathVariable("siteId") String siteId, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/cmm/main/mainPage.do";
return "web/site/kcc/login/changePassword";
}
@RequestMapping(value = "/{siteId}/web/user/join/snsLink.do")
public String snsLink(@ModelAttribute("loginVO") LoginVO loginVO, ModelMap model, HttpSession session) {
String siteId = (String) session.getAttribute("siteId");
model.addAttribute("loginVO", loginVO);
return "web/site/" + siteId + "/login/snsLinkPage";
}
@RequestMapping(value = "/{siteId}/web/user/join/snsLinkUpdate.do")
public String snsLinkUpdate(@ModelAttribute("loginVO") LoginVO loginVO, ModelMap model, HttpSession session) throws Exception {
String siteId = (String) session.getAttribute("siteId");
String siteFolder = "site/" + siteId;
loginService.updateSnsLink(loginVO);
return "web/" + siteFolder + "/login/usrJoinComplete";
}
// (사용자) 회원가입 동의 화면
@RequestMapping(value = "/{siteId}/web/user/join/usrJoinIntro.do")
public String usrJoinIntro(@PathVariable("siteId") String siteId, @RequestParam Map<String, Object> commandMap, HttpServletRequest request, @ModelAttribute("loginVO") LoginVO loginVO,
ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/{siteId}/web/main/mainPage.do";
model.addAttribute("siteId", siteId);
String siteFolder = "site/" + siteId;
model.addAttribute("site_path", "/" + siteFolder);
MberManageConfigVO mberConfigVO = new MberManageConfigVO(); // 회원가입 환경설정
mberConfigVO.setUseYn("Y"); // 사용하는것만
mberConfigVO.setIsSns("N");
mberConfigVO.setSiteId(siteId);
List<MberManageConfigVO> mberManageCnfList = mberManageService.selectMberCnf(mberConfigVO);
model.addAttribute("mberManageCnfList", mberManageCnfList);
model.addAttribute("loginVO", loginVO);
// 약관가져오기
SiteManagerVO termsVO = new SiteManagerVO();
termsVO.setSiteId(siteId);
termsVO = egovSiteManagerService.selectSiteManagerVO(termsVO);
if (null != termsVO) {
if (!"N".equals(termsVO.getTermsYn())) {
model.addAttribute("termsVO", termsVO);
}
}
return "web/" + siteFolder + "/login/usrJoinIntro";
}
// (사용자) 회원가입 화면
@RequestMapping(value = "/{siteId}/web/user/join/usrJoinRegist.do")
public String usrJoinView(@PathVariable("siteId") String siteId, @RequestParam Map<String, Object> commandMap, HttpServletRequest request,
@ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/{siteId}/web/main/mainPage.do";
model.addAttribute("siteId", siteId);
String siteFolder = "site/" + siteId;
model.addAttribute("site_path", "/" + siteFolder);
return "web/" + siteFolder + "/login/usrJoinRegist";
}
/**
* (사용자) 회원가입 처리
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/{siteId}/web/user/join/usrJoinInsert.do")
public String usrJoinInsert(@PathVariable("siteId") String siteId, @ModelAttribute("userManageVO") UserGuestVO userManageVO, HttpServletRequest request, HttpServletResponse response,
ModelMap model, @RequestParam Map<String, Object> commandMap, RedirectAttributes redirectAttributes) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated)
return "redirect:/{siteId}/web/main/mainPage.do";
model.addAttribute("siteId", siteId);
String siteFolder = "site/" + siteId;
model.addAttribute("site_path", "/" + siteFolder);
// UserVO userVO = (UserVO) request.getSession().getAttribute("selfauthUserVO");
// // 본인인증 정보가 없거나, 인증정보와 번호가 다를때
// if (userVO == null || !userManageVO.getMoblphonNo().equals(userVO.getMblNum())) {
// model.addAttribute("message", "비 정상적인 접근입니다. 본인인증을 해주세요.");
// return "web/login/usrJoinRegist";
// }
// request.getSession().setAttribute("selfauthUserVO", null);
// 본인인증 데이터
// userManageVO.setEmplyrNm(userVO.getName());
// userManageVO.setBrth(userVO.getBirYMD());
// userManageVO.setMblDn(userVO.getMblDn());
// userManageVO.setMoblphonNo(userVO.getMblNum());
// 기 가입된 휴대폰번호인지 확인
// LoginVO vo = new LoginVO();
// vo.setMblDn(userVO.getMblDn());
// vo = loginService.searchIdByMblDn(vo);
//
// if (vo != null && vo.getId() != null) {
// }
if (1 == 2) {
model.addAttribute("message", "이미 가입된 휴대폰 번호입니다.");
return "web/" + siteFolder + "/login/usrJoinRegist";
}
userManageVO.setAuthorCode("ROLE_GNRL_USER");
userManageVO.setJoinType("2"); // 직접가입:2
userManageVO.setCondition("1"); // 정상:1, 휴면:2, 탈퇴:3
userManageVO.setUseYn("0"); // 사용:0
userManageService.insertUser(userManageVO);
return "web/" + siteFolder + "/login/usrJoinComplete";
}
/**
* (사용자) 아이디 중복 확인
*
* @return model
* @throws Exception
*/
@RequestMapping(value = "{siteId}/web/user/join/usrIdDplctCnfirmAjax.do")
public ModelAndView usrIdDplctCnfirmAjax(@PathVariable("siteId") String siteId, @RequestParam Map<String, Object> commandMap) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
String checkId = (String) commandMap.get("checkId");
// checkId = new String(checkId.getBytes("ISO-8859-1"), "UTF-8");
int usedCnt = userManageService.checkIdDplct(checkId);
modelAndView.addObject("usedCnt", usedCnt);
modelAndView.addObject("checkId", checkId);
return modelAndView;
}
/**
* (사용자) ID 찾기
*
* @return model
* @throws Exception
*/
@RequestMapping(value = "{siteId}/web/user/join/selectUserIdAjax.do")
public ModelAndView selectUserIdAjax(@PathVariable("siteId") String siteId, @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
List<UserManageVO> usedNmList = userManageService.selectUserIdAjax(userManageVO);
modelAndView.addObject("usedNmList", usedNmList);
return modelAndView;
}
/**
* (사용자) password 찾기
*
* @return model
* @throws Exception
*/
@RequestMapping(value = "{siteId}/web/user/join/selectUserPWAjax.do")
public ModelAndView selectPasswordAjax(@PathVariable("siteId") String siteId, @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
int usedCnt = userManageService.selectUserPWAjax(userManageVO);
if (usedCnt > 0) {
String id = userManageVO.getEmplyrId() + "!!";
userManageVO.setPassword(id);
userManageService.updateUserPWAjax(userManageVO);
}
modelAndView.addObject("usedCnt", usedCnt);
return modelAndView;
}
private void setSiteinfo(SiteManagerVO siteManagerVO, ModelMap model, HttpServletRequest request) throws Exception {
SiteManagerVO tempSiteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO);
if (tempSiteManagerVO != null) {
siteManagerVO.setIsMobile("pc");
siteManagerVO.setTheme(tempSiteManagerVO.getTheme());
} else {
siteManagerVO.setTheme("01");
}
WebUtil util = new WebUtil();
if (util.isMobile(request)) {
siteManagerVO.setIsMobile("mobile");
}
model.addAttribute("siteId", siteManagerVO.getSiteId());
// model.addAttribute("site_path" ,
// "/site/theme_"+siteManagerVO.getTheme()+"/"+siteManagerVO.getIsMobile());
model.addAttribute("site_path", "/site/" + siteManagerVO.getSiteId() + "/" + siteManagerVO.getIsMobile());
}
/**
* 복호화
*
* @param privateKey
* @param securedValue
* @return
* @throws Exception
*/
/*
* private String decryptRsa(PrivateKey privateKey, String securedValue) throws
* Exception { Cipher cipher =
* Cipher.getInstance(EgovLoginController.RSA_INSTANCE); byte[] encryptedBytes =
* hexToByteArray(securedValue); cipher.init(Cipher.DECRYPT_MODE, privateKey);
* byte[] decryptedBytes = cipher.doFinal(encryptedBytes); String decryptedValue
* = new String(decryptedBytes, "utf-8"); // 문자 인코딩 주의. return decryptedValue; }
*/
/**
* 16진 문자열을 byte 배열로 변환한다.
*
* @param hex
* @return
*/
public static byte[] hexToByteArray(String hex) {
if (hex == null || hex.length() % 2 != 0) {
return new byte[] {};
}
byte[] bytes = new byte[hex.length() / 2];
for (int i = 0; i < hex.length(); i += 2) {
byte value = (byte) Integer.parseInt(hex.substring(i, i + 2), 16);
bytes[(int) Math.floor(i / 2)] = value;
}
return bytes;
}
/**
* rsa 공개키, 개인키 생성
*
* @param request
*/
/*
* public void initRsa(HttpServletRequest request) { HttpSession session =
* request.getSession();
*
* KeyPairGenerator generator; try { generator =
* KeyPairGenerator.getInstance(EgovLoginController.RSA_INSTANCE);
* generator.initialize(1024);
*
* KeyPair keyPair = generator.genKeyPair(); KeyFactory keyFactory =
* KeyFactory.getInstance(EgovLoginController.RSA_INSTANCE); PublicKey publicKey
* = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate();
*
* session.setAttribute(EgovLoginController.RSA_WEB_KEY, privateKey); //
* session에 RSA 개인키를 세션에 저장
*
* RSAPublicKeySpec publicSpec = (RSAPublicKeySpec)
* keyFactory.getKeySpec(publicKey, RSAPublicKeySpec.class); String
* publicKeyModulus = publicSpec.getModulus().toString(16); String
* publicKeyExponent = publicSpec.getPublicExponent().toString(16);
*
* request.setAttribute("RSAModulus", publicKeyModulus); // rsa modulus 를
* request 에 추가 request.setAttribute("RSAExponent", publicKeyExponent); // rsa
* exponent 를 request 에 추가 } catch (Exception e) { // TODO Auto-generated catch
* block e.printStackTrace(); } }
*/
// 사용자 에러페이지 표시후 로그인 페이지로
private String goUserLoginPage(RedirectAttributes redirectAttributes, HttpServletRequest request, ModelMap model, String alertMessage) {
redirectAttributes.addFlashAttribute("message", alertMessage);
return "redirect:/";
}
/* SNS 추가 내역 */
@RequestMapping(value = "/snsLogin/naverOauth.do", produces = "application/json", method = { RequestMethod.GET, RequestMethod.POST })
public String naverRedirect(Model model, @RequestParam("code") String code, @RequestParam String state, HttpSession session, HttpServletRequest req, RedirectAttributes redirectAttributes) {
String siteId = (String) session.getAttribute("siteId");
JsonNode node = getAccessToken("naver", code, state);
// 결과값 출력
System.out.println("node : " + node);
// 노드 안에 있는 access_token값을 꺼내 문자열로 변환
String token = node.get("access_token").toString();
// 세션에 담아준다.
session.setAttribute("token", token);
JsonNode userInfo = getUserInfo("naver", node.get("access_token"));
JsonNode response = userInfo.path("response");
String id = response.path("id").asText();
String name = response.path("name").asText();
String snsEmail = response.path("email").asText();
LoginVO loginVO = new LoginVO();
loginVO.setSnsId(id);
loginVO.setName(name);
loginVO.setSnsEmail(snsEmail);
loginVO.setSnsSite("naver");
model.addAttribute("loginVO", loginVO);
return "web/login/EgovUserSNSLogin";
}
@RequestMapping(value = "/snsLogin/kakaoOauth.do", produces = "application/json", method = { RequestMethod.GET, RequestMethod.POST })
public String kakaoRedirect(Model model, @RequestParam("code") String code, HttpSession session, HttpServletRequest req, RedirectAttributes redirectAttributes) {
JsonNode node = getAccessToken("kakao", code, "");
// 노드 안에 있는 access_token값을 꺼내 문자열로 변환
String token = node.get("access_token").toString();
// 세션에 담아준다.
session.setAttribute("token", token);
JsonNode userInfo = getUserInfo("kakao", node.get("access_token"));
String id = userInfo.path("id").asText();
String name = userInfo.path("name").asText();
String snsEmail = userInfo.path("email").asText();
// 유저정보 카카오에서 가져오기 Get properties
JsonNode properties = userInfo.path("properties");
JsonNode kakao_account = userInfo.path("kakao_account");
id = userInfo.path("id").asText();
name = null;
snsEmail = null;
name = properties.path("nickname").asText();
snsEmail = kakao_account.path("email").asText();
LoginVO loginVO = new LoginVO();
loginVO.setSnsId(id);
loginVO.setName(name);
loginVO.setSnsEmail(snsEmail);
loginVO.setSnsSite("kakao");
model.addAttribute("loginVO", loginVO);
// return "forward:/"+siteId+"/web/user/login/actionSecurityLogin.do?snsnsId="+id+"&name="+name+"&email="+email+"&snsSite=kakao";
return "web/login/EgovUserSNSLogin";
}
public JsonNode getAccessToken(String site, String code, String state) {
String RequestUrl = "";
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
if (site.equals("kakao")) {
RequestUrl = "https://kauth.kakao.com/oauth/token";
postParams.add(new BasicNameValuePair("grant_type", "authorization_code"));
postParams.add(new BasicNameValuePair("client_id", itnKakaoRestApiKey));
postParams.add(new BasicNameValuePair("code", code));
} else if (site.equals("naver")) {
RequestUrl = "https://nid.naver.com/oauth2.0/token";
postParams.add(new BasicNameValuePair("grant_type", "authorization_code"));
postParams.add(new BasicNameValuePair("client_id", itnNaverClientId));
postParams.add(new BasicNameValuePair("client_secret", itnNaverClientSecret));
postParams.add(new BasicNameValuePair("code", code));
postParams.add(new BasicNameValuePair("state", state));
} else if (site.equals("google")) {
}
final HttpClient client = HttpClientBuilder.create().build();
final HttpPost post = new HttpPost(RequestUrl);
JsonNode returnNode = null;
try {
post.setEntity(new UrlEncodedFormEntity(postParams));
final HttpResponse response = client.execute(post);
final int responseCode = response.getStatusLine().getStatusCode();
// JSON 형태 반환값 처리
ObjectMapper mapper = new ObjectMapper();
returnNode = mapper.readTree(response.getEntity().getContent());
} catch (UnsupportedEncodingException e) {
System.out.println("UnsupportedEncodingException Occured!!!");
} catch (ClientProtocolException e) {
System.out.println("ClientProtocolException Occured!!!");
} catch (IOException e) {
System.out.println("IOException Occured!!!");
} finally {
}
return returnNode;
}
public JsonNode getUserInfo(String site, JsonNode accessToken) {
// String CLIENT_ID = K_CLIENT_ID; // REST API KEY
// String REDIRECT_URI = K_REDIRECT_URI; // 리다이렉트 URI
// String code = autorize_code; // 로그인 과정중 얻은 토큰 값
String RequestUrl = "";
if (site.equals("kakao")) {
RequestUrl = "https://kapi.kakao.com/v2/user/me";
} else if (site.equals("naver")) {
RequestUrl = "https://openapi.naver.com/v1/nid/me";
} else if (site.equals("google")) {
}
final HttpClient client = HttpClientBuilder.create().build();
final HttpPost post = new HttpPost(RequestUrl);
// add header
post.addHeader("Authorization", "Bearer " + accessToken);
JsonNode returnNode = null;
try {
final HttpResponse response = client.execute(post);
final int responseCode = response.getStatusLine().getStatusCode();
// JSON 형태 반환값 처리
ObjectMapper mapper = new ObjectMapper();
returnNode = mapper.readTree(response.getEntity().getContent());
} catch (UnsupportedEncodingException e) {
System.out.println("UnsupportedEncodingException Occured!!!");
} catch (ClientProtocolException e) {
System.out.println("ClientProtocolException Occured!!!");
} catch (IOException e) {
System.out.println("IOException Occured!!!");
} finally {
// clear resources
}
return returnNode;
}
/**
* (관리자) 법원연계 조정위원 로그인 화면.
*
* @return String
* @exception Exception
*/
@RequestMapping(value = "/uat/uia/EgovLoginCourt.do")
public String EgovLoginCourt(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
//interceptor시 flashmap을 통해 파라미터 전달 받기
Map<String, ?> flashMap = RequestContextUtils.getInputFlashMap(request);
if(flashMap !=null) {
System.out.println((String)flashMap.get("message"));
model.addAttribute("message", (String)flashMap.get("message"));
}
if (isAuthenticated)
return "redirect:/cmm/main/mainPage.do";
if (!isAuthenticated) {
return "uat/uia/EgovLoginUsrCourt";
}
return "uat/uia/EgovLoginUsrCourt";
}
/**
* (관리자) 일반(스프링 시큐리티) 로그인을 처리한다(관리자)
*
* @param vo - 아이디, 비밀번호가 담긴 LoginVO
* @param request - 세션처리를 위한 HttpServletRequest
* @return result - 로그인결과(세션정보)
* @exception Exception
*/
@RequestMapping(value = "/uat/uia/actionSecurityLoginCourt.do")
public String selectActionSecurityLoginCourt(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletResponse response, HttpServletRequest request, ModelMap model, HttpSession session)
throws Exception {
Locale.setDefault(new Locale("ko", "Kr"));
// 로그인 정보 check
if (loginVO.getId() == null || loginVO.getPassword() == null) { // 로그인 최초 화면 로딩
return "uat/uia/EgovLoginUsrCourt";
}
loginVO.setId(loginVO.getId());
loginVO.setPassword(loginVO.getPassword());
// 사용자일 경우 로그인 안되게
LoginVO loginInfo = loginService.getUserAuth(loginVO);
String s_loginInfo_getAuthority = "";
try {
s_loginInfo_getAuthority = loginInfo.getAuthority();
}catch(Exception ex) {
System.out.println(ex.getMessage());
}
if (null == loginInfo) { // 아이디 없음.
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsrCourt";
} else {
if(!"ROLE_COURT_ADMIN".equals(s_loginInfo_getAuthority)){
model.addAttribute("message", "법원연계 관리자만 로그인 가능합니다.");
return "uat/uia/EgovLoginUsrCourt";
}
}
// 1. 로그인 처리
LoginVO resultVO = loginService.actionLogin(loginVO);
//중복 호출 제거
LoginVO loginGetUserAuth = loginService.getUserAuth(resultVO);
if (loginGetUserAuth != null) {
resultVO.setAuthority(loginGetUserAuth.getAuthority());
}
if (null == resultVO.getId()) { // 로그인 실패
loginService.updatePassMissPlus(loginVO);
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsrCourt";
} else {
if (resultVO.getPassMiss() > 10) {
model.addAttribute("message", "패스워드가 10회 이상 틀려 로그인 할수 없습니다. 관리자에게 문의하시기 바랍니다.");
return "uat/uia/EgovLoginUsrCourt";
} else { // 초기화
loginService.updatePassMissReset(loginVO);
}
}
// 2. 허용IP조회
boolean loginPolicyYn = false;
HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
String userIp = EgovClntInfo.getClntIP(req);
/*
* 관리자 로그인 유형 추가_240109
* loginTypeCd
* 001 : IP제어
* 002 : OTP
* 003 : 법원연계 로그인
* */
// IP 제어 로그인
if("001".equals(resultVO.getLoginTypeCd())) {
LoginPolicyVO loginPolicyVO = new LoginPolicyVO();
loginPolicyVO.setIpInfo(userIp);
boolean ipCheck = false;
List<LoginPolicyVO> loginPolicyGroupList = new ArrayList<LoginPolicyVO>();
loginPolicyGroupList = egovLoginPolicyService.selectLoginGroupPolicyAll(loginPolicyVO);
if (loginPolicyGroupList != null) {
for (LoginPolicyVO tempPolicyVO : loginPolicyGroupList) {
if (userIp.contains(tempPolicyVO.getIpInfo().trim())) {
ipCheck = true;
break;
}
}
}
if (!ipCheck) {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsrCourt";
}
}
// resultVO.siteId 의 각 로그인 ip를 조회함
if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("")) {
// 세션에다 ip 등록
resultVO.setIp(userIp);
// 2. spring security 연동
request.getSession().setAttribute("LoginVO", resultVO);
UsernamePasswordAuthenticationFilter springSecurity = new UsernamePasswordAuthenticationFilter();
ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
if (beans.size() > 0) {
springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
springSecurity.setUsernameParameter("egov_security_username");
springSecurity.setPasswordParameter("egov_security_password");
springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() + "/egov_security_login", "POST"));
} else {
throw new IllegalStateException("No AuthenticationProcessingFilter");
}
springSecurity.doFilter(new RequestWrapperForSecurity(request, resultVO.getUserSe() + resultVO.getId(), resultVO.getUniqId()), response, null);
{ // 관리자 로그인 log 저장
String uniqId = "";
String ip = "";
/* Authenticated */
LoginLog loginLog = new LoginLog();
Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
if (isAuthenticated.booleanValue()) {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
uniqId = user.getUniqId();
ip = EgovClntInfo.getClntIP(request);
loginLog.setSiteId(user.getSiteId());
HttpSession httpSession = request.getSession(true);
{
List<SiteManagerVO> siteManageList = new ArrayList<SiteManagerVO>();
SiteManagerVO siteManagerVO = new SiteManagerVO();
siteManagerVO.setFirstIndex(0);
siteManagerVO.setRecordCountPerPage(100);
siteManageList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
httpSession.setAttribute("siteManageList", siteManageList);
httpSession.setAttribute("adminId", user.getId());
httpSession.setAttribute("loginId", user.getId()); // 자동완성 공통으로 쓰기위해
httpSession.setAttribute("esntlId", user.getPassword());
}
}
}
return "blank"; // 성공 시 페이지.. (redirect 불가)
// 개인키 삭제
// return "blank"; // 성공 시 페이지.. (redirect 불가)
} else {
model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
return "uat/uia/EgovLoginUsrCourt";
}
}
}
class RequestWrapperForSecurity extends HttpServletRequestWrapper {
private String username = null;
private String password = null;
public RequestWrapperForSecurity(HttpServletRequest request, String username, String password) {
super(request);
this.username = username;
this.password = password;
}
@Override
public String getServletPath() {
return ((HttpServletRequest) super.getRequest()).getContextPath() + "/egov_security_login";
}
@Override
public String getRequestURI() {
return ((HttpServletRequest) super.getRequest()).getContextPath() + "/egov_security_login";
}
@Override
public String getParameter(String name) {
if (name.equals("egov_security_username")) {
return username;
}
if (name.equals("egov_security_password")) {
return password;
}
return super.getParameter(name);
}
}