이전글

[spring] 로그인 세션 처리 - interceptor 설정

호빵찡 2017. 2. 27. 17:21

로그인 기능이 없던 기존의 홈페이지에 로그인 화면과 로그인 세션 처리부분을 추가했다.





인터셉터 설정


WEB-INF > spring > appServlet > 

[servlet-context.xml]




<mapping path="/**" />

-> 모든 경로의 페이지들 인터셉터 처리


<beans:bean class="com.my.web.interceptor.Interceptor" />

-> 인터셉터 클래스의 위치


※spring 3.2 이상에서는  <exclude-mapping> 태그로 인터셉터 처리에서 제외할 위치를 지정할 수 있지만 spring 3.1을 이용했기 때문에 추가적으로 처리가 필요했다.





인터셉터 클래스


[interceptor.java]



위에서 언급한 인터셉터에서 제외할 경로를 처리하고 prehandler를 이용해  세션을 검사하고 로그인 체크를 한다.

session에서 userId가 null인 경우 세션에 아이디가 입력되지 않은것이니 다시 로그인 창으로 돌려보내고 로그인이 되어있는 경우엔 컨트롤러로 요청을 전달한다.





컨트롤러




@RequestMapping(value = "/login.do", method = RequestMethod.GET)
    public String login(){
        
        return "menu/login";
    }

-> 인터셉터 클래스에서 /login.do 가 호출되면 로그인 창으로


@Resource(name="LoginDAO")
    LoginDAO dao;

-> 로그인 창에 입력하는 ID/PW를 데이터베이스에 저장된 관리자 계정과 비교하기 위해 


@RequestMapping(value = "/login.action", method = RequestMethod.GET)
    public String loginAction(HttpServletRequest req, HttpServletResponse res, HttpSession session){
        LoginVO loginVO = new LoginVO();
        String U_ID;
        String U_PW;
        
        U_ID = dao.getID(32);
        U_PW = dao.getPW(32);
        
        String userId = req.getParameter("userId");
        String userPw = req.getParameter("userPw");
        String returnURL = "";
        if(userId.equals(U_ID)&&userPw.equals(U_PW)){
            session.setAttribute("userId", userId);
            returnURL = "redirect:/main.do";
        }
        else{
            returnURL = "redirect:/";
        }
        
        return returnURL;
        
    }

-> 로그인 창에서 로그인 버튼을 누르면 DB의 정보와 현재 세션에 입력된 정보를 비교하고 ID/PW 둘 다 동일하면 메인 페이지로 가게 한다.

둘 중 하나라도 DB의 정보와 다르게 입력될 시 다시 로그인 페이지로 돌아온다.


 @RequestMapping(value="/logout.do")
    public String logout(HttpSession session){
        session.invalidate();
        return "redirect:/login.do";
    }


-> 로그아웃 버튼을 누를때 session.invalidate();로 현재 세션의 정보를 지우고 로그인 창으로 되돌아 간다.