[SPRING 시작-6] #INTERCEPTOR+LOGIN 처리하기/스프링 로그인처리/LOGIN SESSION CHECK
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 그대로 호출 됨 !!!