본문 바로가기
Framework/Spring

[SPRING 시작-6] #Interceptor+Login 처리하기/스프링 로그인처리/login session check

by 나비와꽃기린 2016. 10. 17.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Interceptor에 관련 개념은 여기 참조 > http://mkil.tistory.com/291

본 예제는 세션을 체크하여 Home화면과 Login 화면 이동 및 로그인 에 대한 접근을 제어하는 방법을 알아보는 예제이다!

예제 시나리오는

(1) /home 호출--> 로그인을 위한 세션이 있는가? 판단하여

                  세션이 없으면 login 페이지로, 있다면 home 페이지로

(2) login 페이지에서 /loginCheck 호출 à loginCheck를 통해 세션 생성

(3) /home을 리다이렉트 없이 접근 가능


(1) Login 화면 생성

/* 1단계 :: 로그인 화면  */
@RequestMapping(value = "/login")
public String home(Locale locale, Model model) {
        logger.debug("====login 화면=====");
	return "/login";
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	Login Page
	
	<form action="/spring/loginCheck" id="loginCheck">
		<input type="text" id="id" name="id" value="admin">
		<input type="text" id="pwd" name="pwd" value="welcome1">
		<input type="submit" value="submit">
	</form>
	
</body>
</html>

(2) home 화면 생성

/* 2단계 :: homepage 화면  생성*/
/* 2단계 :: servlet-context에 interceptor path 설정  */
@RequestMapping(value = "/home")
public String home(Locale locale, Model model) {
	logger.debug("====home 화면=====");
	return "home";
}
<interceptors>
	<interceptor>
		<mapping path="/home" />
		<beans:bean class="com.common.logger.LoginInterceptor"></beans:bean>
	</interceptor>
</interceptors>

컨트롤러 호출 또는 /home 호출 전에 LoginInterceptor 호출하겠다는 의미이다.

<mapping path=””> 여러 주어 다중설정이 가능하다.


(3) login check 컨트롤러 생성

//로그인체크
@RequestMapping(value = "/loginCheck", method = RequestMethod.GET)
public String loginCheck(HttpServletRequest request, HttpServletResponse response) {
	
	logger.debug("=============================loginCheck");
	
	  String returnURL = "";
	  
		//웹페이지에서받은 아이디,패스워드 일치시 admin 세션key 생성
		if("admin".equals(request.getParameter("id")) && "welcome1".equals(request.getParameter("pwd")) ) {
			Map map = new HashMap();
			map.put("admin_id", "admin");
			map.put("admin_name", "administrator");
			request.getSession().setAttribute("logininfo", map); //세션에 admin 정보 셋팅
			returnURL = "home";  //일치하면 admin 페이지로 이동
	   
		}else {
			returnURL = "login";  //일치하지 않으면 로그인페이지 재이동
		}
		return returnURL;
}

Login 페이지에서 id pwd 입력하면 Admin인지 판단하여 session 넣어준다.

테스트 예제이기 때문에 Admin 관련 정보로 셋팅했다.

부분은 사용자에 맞게 커스터마이징하여 사용하면 되겠다.



<<<결과확인>>>>

/home 호출 --> 아직까지는 interceptor에서 logininfo라는 세션이 없기 때문에 Login page로 리다이렉트 됨


login 페이지에서 submit을 클릭하면 /loginCheck를 타서

입력되어져 있는 id, pwd값이 일치하면 sessionlogininfo 값을 설정 한뒤

homepage로 페이지 이동이 됨.

Url에 저렇게 파라미터가 딸려가는건 꼭 피해야 할 사항;-_-

지금은 테스트니깐…………..넘어가자..(머쓱머쓱)


  /home 다시 호출 하게되면

interceptor에서 세션이 있음을 확인했기 때문에 /home 그대로 호출 됨 !!!



Session과 Interceptor를 활용한 Login 예제 끝!