[JAVA]filter 사용자관리

JAVA 2017. 11. 16. 16:29

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
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,