스프링으로는 권한처리를 어떻게 해야하는지 궁금해서 찾아보니 서블릿 필터 기반의 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. 예제 프로젝트 구조

 

01.png

 

 

 

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 넣고 로그인한다.

02.png

 

로그인 된 이후 화면이다

 

03.png

 

 

로그인 된 이후 페이지1 링크를 클릭하면 세션을 다른 페이지에서 사용할 수 있음을 알수 있다.

04.png

 

 

만약 특정 페이지에서 세션을 사용하고 싶지 않다면 page2.jsp처럼 page session="false" 설정하면된다.

아래와 같이 그 예제로 접속하면 세션이 안나타남을 알수 있다.

05.png

 

 

 

 **) 전체 소스 파일은 첨부파일 다운받으면 된다.   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
블로그 이미지

532

처음 프로그래밍을 시작한 개발자들은 Hello World!를 기억 할 것이다. Hello world가 Hell World가 될 줄 몰랐던 한 개발자의 이야기. 게시글의 출처를 표기하며, 출처를 남기지 않고 펌을 하는것에 대해 법적 책임을 묻지 않습니다.

,