본문 바로가기
Java/Spring Framework

[SPRING 시작-6] #INTERCEPTOR+LOGIN 처리하기/스프링 로그인처리/LOGIN SESSION CHECK

by 놀러와요 2019. 9. 9.
반응형

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값이 일치하면 session에 logininfo 값을 설정 한뒤

homepage로 페이지 이동이 됨.

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

 

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

 

  /home 다시 호출 하게되면

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

 

 

출처 : http://mkil.tistory.com/305?category=541781

반응형