스프링으로는 권한처리를 어떻게 해야하는지 궁금해서 찾아보니 서블릿 필터 기반의 spring security를 이용하는것 같다.
필터기반 권한처리 방법이 생소해서(사용해본적이 없어서 익숙하지 않음) 책을 좀 찾아보니 확실히 기존 방법보다는 좋은것 같다.
하지만 일단, security를 이용한 권한처리 방법은 좀 나중에 공부하고 -_-
지금까지 사용해왔던, Session을 이용해서 권한처리를 Spring에서는 어떤식으로 해야하는지 예제파일 만들어봤다.
(공부하면서 만든 예제파일이므로 졸라 허접하고 많이 틀렸을수도 있다 -_-)
1. 테이블 및 기초데이터 생성
- mysql을 이용함
create table user ( userid varchar (100), password varchar (100), username varchar (100), email varchar (100) ); insert into user values ( 'test' , '1234' , '테스트' , 'test@test.com' ); |
2. 예제 프로젝트 구조
3. 로그인해서 세션 할당해주는 Controller Bean
LoginController.java
package com.mungchung.sample.login; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller public class LoginController { @Autowired private LoginBO loginBO; // 세션사용 화면 @RequestMapping ( "page1" ) public String page1() { return "page1" ; } // 세션 사용 안하는 화면 @RequestMapping ( "page2" ) public String page2() { return "page2" ; } // 로그인 화면 @RequestMapping ( "login" ) public String login() { return "login" ; } // 로그아웃 @RequestMapping ( "logout" ) public String logout(HttpSession session) { session.setAttribute( "userLoginInfo" , null ); return "redirect:login" ; } // 로그인 처리 @RequestMapping (value= "loginProcess" , method = RequestMethod.POST) public ModelAndView loginProcess(User user, HttpSession session, HttpServletRequest request) { ModelAndView mav = new ModelAndView(); mav.setViewName( "redirect:login" ); User loginUser = loginBO.findByUserIdAndPassword(user.getUserId(), user.getPassword()); if (loginUser != null ) { session.setAttribute( "userLoginInfo" , loginUser); } return mav; } } |
4. 샘플 JSP 페이지들
로그인 파일 : login.jsp
페이지하나에 세션여부를 검사해서 로그인 화면이 나타날지 로그인된 이후 화면이 나타날지 분기처리 한다.
세션값 확인하는 방법은 단순하게 <%=session.getAttribute("userLoginInfo")%> 해도 되지만
아래 예제는 jstl을 이용해서 세션값 확인하는 방법을 이용했다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> < html > < head > < title >로그인 </ title > </ head > < body > < c:choose > < c:when test = "${not empty sessionScope.userLoginInfo}" > < h2 >로그인 성공 </ h2 > 이름 : ${sessionScope.userLoginInfo.userName} 이메일 : < c:out value = "${sessionScope.userLoginInfo.email}" /> < a href = "logout" >로그아웃</ a > < a href = "page1" >페이지1</ a > < a href = "page2" >페이지2</ a > </ c:when > < c:otherwise > < h2 >로그인 </ h2 > < form name = "form1" method = "post" action = "loginProcess" > < table > < tr height = "40px" > < td >유저ID</ td > < td >< input type = "text" name = "userId" ></ td > </ tr > < tr height = "40px" > < td >패스워드</ td > < td >< input type = "password" name = "password" ></ td > </ tr > </ table > < table > < tr > < td align = "center" >< input type = "submit" value = "로그인" ></ td > < td align = "center" >< input type = "reset" value = "리셋" ></ td > </ tr > </ table > </ form > </ c:otherwise > </ c:choose > </ body > </ html > |
세션확인페이지 : page1.jsp
세션설정한 값이 다른 페이지에서 정상적으로 사용가능한지 확인하는 예제
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page session="true" %> < html > < head > < title >Session 사용</ title > </ head > < body > < h2 >Session 사용</ h2 > < p >세션 이름 : < b >${sessionScope.userLoginInfo.userName}</ b ></ p > < P >페이지 상단에 <%@ page session="true" %> 선언함</ P > </ body > </ html > |
세션사용안하는페이지 : page2.jsp
세션을 사용하고 싶지 않은 페이지의 경우 어떤식으로 설정해야하는지 보여주는 예제
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page session="false" %> < html > < head > < title >Session 사용안함</ title > </ head > < body > < h2 >Session 사용안함</ h2 > < p >세션 이름 : < b >${sessionScope.userLoginInfo.userName}</ b ></ p > < P >페이지 상단에 <%@ page session="false"%> 선언함</ P > </ body > </ html > |
5. 실행결과
http://localhost:8080/SampleSessionLogin/login 로 접속하면 아래와 같은 로그인 화면이 나온다.
test/1234 넣고 로그인한다.
로그인 된 이후 화면이다
로그인 된 이후 페이지1 링크를 클릭하면 세션을 다른 페이지에서 사용할 수 있음을 알수 있다.
만약 특정 페이지에서 세션을 사용하고 싶지 않다면 page2.jsp처럼 page session="false" 설정하면된다.
아래와 같이 그 예제로 접속하면 세션이 안나타남을 알수 있다.
**) 전체 소스 파일은 첨부파일 다운받으면 된다. SampleSessionLogin.zip
[출처] http://www.mungchung.com/xe/spring/21229
'프레임워크 > Spring' 카테고리의 다른 글
Spring 강좌 웹개발자 샤쿠 (0) | 2015.10.16 |
---|---|
Spring MVC 시작하기 (0) | 2015.10.16 |
Spring 3.0 시작 - Hello World 동작원리 (0) | 2015.10.16 |
신입개발자님 Spring 게시판 강의 (0) | 2015.10.16 |
TheWiz Spring 강의 (0) | 2015.10.16 |