filter 사용자관리
/***************************************************
* <pre>
* 업무 그룹명 : 워크넷
* 서브 업무명 : 공통>서블릿 인증 필터
* 설 명 : 서블릿 인증 필터
* 작 성 자 : 김종국
* 작 성 일 : 2008.06.28
* Copyright ⓒ WorknetCenter All Right Reserved
* </pre>
***************************************************/
package gov.com.login;
import gov.com.ldapCommon.LdapCommon;
import gov.com.util.Utils;
import gov.workcenter.base.Constants;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import sso.work.WorkNetEAM;
import com.skcc.base.ComponentRegistry;
import com.skcc.component.sql.ISqlManagement;
import com.skcc.component.util.BaseUtils;
import com.skcc.framework.core.internal.Request;
/**
* 사용자,관리자 session 관리를 하는 컴포넌트의 인터페이스.
*/
public class AdminSignonFilter implements Filter {
private LdapCommon ldapCommon = new LdapCommon();
private final Log logger = LogFactory.getLog(AdminSignonFilter.class);
private FilterConfig config;
/**
* 관리자의 요청에 대한 Authentication과 Authorization을 수행함.
* @param request : 사용자 요청
* @param response : 사용자 요청에 대한 응답
* @param chain : 서블릿 필터 체인
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest hRequest = (HttpServletRequest) request;
HttpSession session = hRequest.getSession(false);
// 비밀번호변경 및 사용자피씨 정보 등록시 통합 연동을 위한 조건처리
if (hRequest.getServletPath().startsWith("/intraNetIndex")) {
forward(request, response, hRequest.getServletPath());
// 알선자 명단 및 채용결과 통보서 메일
} else if (hRequest.getServletPath().indexOf("psycologyConsultationEmail.jsp") > 0) {
chain.doFilter(request, response);
// 알선자 명단 및 채용결과 통보서 메일
} else if (hRequest.getServletPath().indexOf("MediationPersonListEmail.jsp") > 0) {
chain.doFilter(request, response);
// 알선장 메일
} else if (hRequest.getServletPath().indexOf("MediationPublishListEmail.jsp") > 0) {
chain.doFilter(request, response);
// 공통팝업 호출, 세션 값이 없을 경우 팝업창 close 처리, 세션값이 없을 경우
} else if (hRequest.getServletPath().startsWith("/com/popup")
&& (session == null || session.getAttribute(Constants.USER_KEY) == null)) {
// 쿠키에 JGWTOKEN 값이 없을 경우 초기 페이지로 이동
if (Utils.getCookieByName(hRequest, "JGWTOKEN") == null) {
logger.info("인증되지 않았거나 쿠키에 JGWTOKEN 값이 존재하지 않습니다.");
forward(request, response, "/com/popup/popPreIndex.jsp");
// 쿠키에 JGWTOKEN 값이 있을 경우 세션정보 생성 후 이동
} else {
try {
createSession(hRequest);
} catch (Exception e) {
logger.debug(e.getMessage());
}
chain.doFilter(request, response);
}
} else if ((session == null || session.getAttribute(Constants.USER_KEY) == null)
&& !hRequest.getServletPath().equals(
Constants.WORKNETCENTER_LOGIN)) {
logger.info("인증되지 않은 사용자 요청을 로그인 화면으로 이동시킵니다. 접근 IP : "
+ hRequest.getRemoteAddr());
forward(request, response, "/preIndex.jsp");
} else {
if (!hRequest.getServletPath().startsWith("/index.jsp")) {
// 세션체크
Map mapData = new HashMap();
String strUrlToken = hRequest.getContextPath() + hRequest.getServletPath();
String strEamToken = (String)session.getAttribute("EAM_TOKEN");
String strJgwToken = (String)session.getAttribute("JGW_TOKEN");
mapData.put("URL_TOKEN", "/worknet" + subStringToChar(strUrlToken, "?"));
mapData.put("EAM_TOKEN", strEamToken);
mapData.put("JGW_TOKEN", strJgwToken);
int intTemp = ldapCommon.chekcAuth(hRequest, mapData);
logger.info("intTemp : "+ intTemp);
if( intTemp == 2 || intTemp == 1
|| hRequest.getServletPath().equals(Constants.WORKNETCENTER_LOGIN)
){
//try {
String curOrgcd = (String)session.getAttribute("ses_OrgCd");
String oldOrgcd = session.getAttribute("old_ses_OrgCd") == null ? "" : (String)session.getAttribute("old_ses_OrgCd");
logger.info("--------------------------------------");
logger.info(curOrgcd);
logger.info(oldOrgcd);
logger.info("--------------------------------------");
if ("11010".equals(oldOrgcd) || "11000".equals(oldOrgcd) || "".equals(curOrgcd)) {
// 한국고용정보원, 노동부, 관리자로그인 인경우 pass
chain.doFilter(request, response);
} else if ("".equals(oldOrgcd)) {
// 최초 호출인경우 pass
session.setAttribute("old_ses_OrgCd",curOrgcd);
chain.doFilter(request, response);
} else if (curOrgcd.equals(oldOrgcd)) {
// 정상 호출 pass
chain.doFilter(request, response);
} else if (!curOrgcd.equals(oldOrgcd)) {
request.setAttribute("msg","이미 고용안정정보망에 로그인 되어 있는 창이 있습니다.\\r\\n다른기관으로 로그인 하시려면 기존로그인되어있는 창을 닫으신 후 다시 로그인 하시기 바랍니다.");
forward(request, response, "/preIndex.jsp");
}
//} catch (Exception ex) {
// forward(request, response, "/preIndex.jsp");
//}
}else{
// 사용권한이 없는 사용자의 경우, 에러처리 화면으로 이동 ( 에러처리 화면에서는 메시지 처리후, HISTORY BACK
logger.info("사용권한이 없는 사용자의 접근. 접근 IP : "+ hRequest.getRemoteAddr());
//System.out.println( "request.getRequestURI() : " + hRequest.getRequestURI() );
//System.out.println( "request.getServletPath() : " + hRequest.getServletPath() );
//chain.doFilter(request, response);
//return alert("사용권한이 없습니다.");
// 인트라넷 메인화면도 권한이 없다면 로그인 화면으로 이동
// 이동하고자 했던 path 세팅
request.setAttribute("fromServletPath", hRequest.getServletPath());
forward(request, response, "/ExceptionNoAuth.jsp");
}
} else {
chain.doFilter(request, response);
}
}
}
private void createSession(HttpServletRequest hRequest) throws Exception {
logger.info("공통팝업 사용자 정보(세션) 생성 시작....");
int intReturnValue = -1;
WorkNetEAM workeam = new WorkNetEAM();
Map mapLdapReturn = new HashMap();
Map mapReturn = null;
Map mapData = null;
intReturnValue = workeam.ssoTokenVerify(Utils.getCookieByName(hRequest,
"JGWTOKEN"));
if (intReturnValue >= 0) {
intReturnValue = workeam.authSSOWithCustNo(hRequest, workeam
.getLdapCustNo());
if (intReturnValue >= 0) {
mapLdapReturn.put("CUST_NO", workeam.getLdapCustNo());
mapLdapReturn.put("RESINO", workeam.getLdapUserRrn());
mapLdapReturn.put("USR_NM", workeam.getLdapUserName());
mapLdapReturn.put("EAM_TOKEN", workeam.getStrEAMToken());
mapLdapReturn.put("JGW_TOKEN", workeam.getStrJGWToken());
} else {
logger.debug("workeam.getLastErrorMsg(): " + workeam.getLastErrorMsg());
}
} else {
logger.debug("workeam.getLastErrorMsg(): " + workeam.getLastErrorMsg());
}
hRequest.getSession().setAttribute("LOGIN_USER_IP",
hRequest.getRemoteAddr());
hRequest.getSession().setAttribute("LOGIN_USER_MAC_ADDRESS",
Utils.getCookieByName(hRequest, "MACADDRESS"));
hRequest.getSession().setAttribute("ses_CustNo",
mapLdapReturn.get("CUST_NO"));
hRequest.getSession().setAttribute("EAM_TOKEN",
mapLdapReturn.get("EAM_TOKEN"));
hRequest.getSession().setAttribute("JGW_TOKEN",
mapLdapReturn.get("JGW_TOKEN"));
hRequest.getSession().setAttribute("mapPageData", mapLdapReturn);
mapReturn = new HashMap();
ISqlManagement sm = (ISqlManagement) ComponentRegistry.lookup(
ISqlManagement.class, "gov.com.ISqlManagement_com");
//mapReturn = (Map) sm.getItem("login.getLoginUser", mapData);
mapReturn = (Map) sm.getItem("login.getLoginUser", mapLdapReturn);
LoginServlet loginSvl = new LoginServlet();
Request iRequest = new Request(hRequest);
loginSvl.setSessionInfo(iRequest, mapReturn);
hRequest = (HttpServletRequest) iRequest
.getAdapter(HttpServletRequest.class);
logger.info("공통팝업 사용자 정보(세션) 생성 완료....");
}
private void forward(ServletRequest request, ServletResponse response,
String page) throws ServletException, IOException {
request.getRequestDispatcher(page).forward(request, response);
}
public void destroy() {
logger.info(this.config.getFilterName() + " Filter destroyed.");
logger.info("________________________________________________________");
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
logger.info("________________________________________________________");
logger.info(this.config.getFilterName() + " Filter created.");
if (BaseUtils.initComponentRegistry(config.getServletContext())) {
logger.info("ComponentRegistry created.");
}
}
public String subStringToChar(String targetValue, String choiceValue) {
if(targetValue.indexOf(choiceValue) != -1)
targetValue = targetValue.substring(0, targetValue.indexOf(choiceValue));
return targetValue;
}
}
'JAVA' 카테고리의 다른 글
[JAVA]filter 파일 업로드 -egov (0) | 2017.11.23 |
---|---|
[JAVA]Filter 응용 (0) | 2017.11.21 |
[JAVA]Filter XSS Cross-Site Scripting (XSS) 필터 (0) | 2017.11.16 |
[JAVA]filter ServletContext (0) | 2017.11.16 |
[JAVA]Filter sendRedirect (0) | 2017.11.16 |