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 * *
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자          수정내용
 *  -------    --------    ---------------------------
 *  2009.03.06  박지욱          최초 생성
 *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
 *
 *      
*/ @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 loginPolicyGroupList = new ArrayList(); 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 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 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 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 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 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 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 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 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 loginPolicyGroupList = new ArrayList(); 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 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 siteManageList = new ArrayList(); 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 authorities = (List) 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 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 siteManageList = new ArrayList(); 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 lisRecentSearch = new ArrayList(); 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 authorities = (List) 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 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 siteManageList = new ArrayList(); 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 lisRecentSearch = new ArrayList(); 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 authorities = (List) 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 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 siteManageList = new ArrayList(); 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 lisRecentSearch = new ArrayList(); 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 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 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 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 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 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 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 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 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 postParams = new ArrayList(); 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 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 loginPolicyGroupList = new ArrayList(); 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 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 siteManageList = new ArrayList(); 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); } }