▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

 

스프링으로는 권한처리를 어떻게 해야하는지 궁금해서 찾아보니 서블릿 필터 기반의 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}<br>
        이메일 : <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

 


댓글 '12'

손님

2012.08.10 15:39:19
*.108.148.29

"비밀글입니다."

:

세션맨

2012.09.03 11:02:18
*.215.230.193

왜 sessionScope 가 안먹나봤더니.. session 설정이 false 였었네요. 잘 보고 갑니다^^

jkj

2012.09.11 17:53:18
*.220.40.222

툴은 어떤걸 사용하신거에요? 이클립스? 넷빈즈?

타도스프링!

2012.10.10 16:04:11
*.93.118.138

<bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:properties/jdbc.properties</value>
            </list>
        </property>    
    </bean>
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="initialSize" value="5"/>
        <property name="maxActive" value="20"/>
        <property name="minIdle" value="5"/>
        <property name="maxWait" value="3000"/>
        <property name="poolPreparedStatements" value="true"/>
        <property name="maxOpenPreparedStatements" value="50"/>
    </bean>
    
    
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="classpath:/sql-map-config.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
        <property name="sqlMapClient" ref="sqlMapClient"/>
    </bean>

아직 댓글 확인 하시는지 모르겠지만 질문 좀 드리겠습니다.
root-context.xml 에서 이해가 가지 않는 부분이 있어서 질문드립니다.

Q) 밑줄 친 classpath는 어디를 참조하는것인가요? 
root-context는 
src/main/webapp/WEB-INF/spring/root-context.xml
에 위치하는데
jdbc.properties는
src/main/resource/propertis/jdbc.properties
에 존재하자나요? 어떤 식으로해서 참조가 이루어지는지 질문드립니다.

Q) jdbc.properties가 적용되는 부분은 datasource부분의 ${jdbc.*} 시리즈인데 
어떤방식으로 둘이 연결이되나요? 소스를 눈 크게 뜨고 찾아봐도 두 빈들을 이어주는 부분이 보이지 않는데.. 어디에서 
이루어지는지 궁금합니다.

댓글을 아직 확인 하시는지 모르겠지만 궁금함에 질문드립니다.

뭉충닷컴

2012.10.11 11:05:36
*.91.142.55

Q1) classpath 위치는 src/main/webapp/WEB-INF/classes 입니다.

문의하신 것은 어떻게 src/main/resources 안에 있는것들을 classpath로 참조할수 있냐고 하셨는데 아래 이미지로 만들어봤습니다.

아래 그림처럼 ecplise(sts)에서는 source 로 지정한 디렉토리는(빨간색 박스친 부분들)은 폴더모양에 빵모양?이라고 해야하나

그 아이콘이 붙어있습니다. 이 소스 디렉토리는 build되면 자동으로 화살표 방향인 src/main/webapp/WEB-INF/classes 디렉토리에 컴파일된 파일들이 옮겨집니다.

 

그래서 src/main/resource에 안에 있는 파일이더라도 classpath로 참조를 하는 것입니다.

 

 

111.png

 

Q2) jdbc.properties 연결 부분은 root-context.xml 파일의 윗부분에 보면 jdbc.properties 파일을 DI (의존성 주입) 하는 부분이 있습니다.

spring이 시작되면 이 properties 파일을 읽어서 spring 컨테이너에 로드해두기 때문에 자동으로 다른곳에서 사용할수 있게 합니다.

 

첨부

타도스프링!

2012.10.11 11:38:09
*.93.118.138

감사합니다 의문이 해결되었네요 ^^;

일단 placeholderconfigurer는 스피링API를 어제 뒤져보고 나서야 이해가 되었구요.

<util:properties > 를 사용하는 걸 추천해주더군요 

http://toby.epril.com/?p=968

근데 마땅히 더한 설명이 없어서 어떻게 사용하는 것인지는 알아볼수가 없더군요;; ㅠㅠ


classpath: 를 항상 봐왔지만 여전히 개념이 부족했다는 생각이 드네요.. 

classpath가 정말 클래스들의 위치를 지정하는 것인지 오늘 처음알게되었습니다. 

감사합니다. 많은 도움이 되었습니다 ^^

타도스프링!

2012.10.11 11:48:23
*.93.118.138

아.. 그냥 써있는 그대로 쓰면 되는거였네요;; 

그냥 활용이 되네요;;


<util:properties id="jdbc" location="classpath:properties/jdbc.properties" />

<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="#{jdbc['driver']}" />

<property name="url" value="#{jdbc['url']}" />

<property name="username" value="#{jdbc['username']}" />

<property name="password" value="#{jdbc['password']}" />

</bean>


다시 한번 감사드립니다 ^^

꿈많은청춘

2013.06.25 17:39:56
*.243.158.99

감사합니다. 잘보고 갑니다

joo

2015.03.12 17:19:02
*.95.190.117

로그아웃페이지를 따로 만들지 않고 로그아웃버튼을 누를때, 세션을줄수는없나요?

joo

2015.03.13 15:29:10
*.95.190.117

  private LoginBO loginBO; 이건무엇인가요..

소율파더

2015.03.23 20:35:45
*.44.34.14

블로그에 퍼갈께요 ~ 감사합니다

닉네임값

2017.01.18 15:57:16
*.44.43.165

블로그에 퍼가겟습니다. 감사합니다 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 Spring 3.0 게시판 뭉충닷컴 2011-08-07 4479
25 Spring Controller의 메서드에 사용될수 있는 파라미터 종류 뭉충닷컴 2012-11-01 7142
24 Spring에서 requestURL 가져올때 URL을 /WEB-INF/views/.. 로 가져오는 이유 뭉충닷컴 2012-10-31 7174
23 Spring의 어노테이션 정보 읽기 뭉충닷컴 2012-10-29 5635
22 Spring MVC 기본 흐름 file 뭉충닷컴 2012-10-23 6656
21 custom taglib 만들때 spring bean 사용하기 뭉충닷컴 2012-08-29 8525
20 STS에서 한글에 String literal is not properly closed by a double-quote 오류가 날 경우 file 뭉충닷컴 2012-07-03 4141
19 Spring @Transactional 어노테이션을 이용한 트랜잭션 예제 file 뭉충닷컴 2012-06-04 8123
18 Spring @Transactional 사용시 rollback이 안될 경우 뭉충닷컴 2012-06-03 12776
17 한글때문에 xml 파싱시 오류날 경우 (URI$MalformedURIException 오류) file 뭉충닷컴 2012-06-02 5209
16 maven에 ojdbc14 추가하기 뭉충닷컴 2012-06-01 5288
15 HandlerInterceptor 간단한 사용 예제 file 뭉충닷컴 2012-03-08 7605
14 Spring Template Project 이용시 maven 빌드를 제대로 못할경우 file [1] 뭉충닷컴 2012-03-07 6006
13 Spring에서 Quartz 이용하기 (스케줄이용방법) file [1] 뭉충닷컴 2012-03-06 12904
12 Spring AOP (Aspect Oriented Programming) 뭉충닷컴 2012-03-05 2682
11 Spring의 HandlerMapping 종류및 사용방법 file 뭉충닷컴 2012-03-04 5660
10 maven을 이용해 배포(Deploy) 대상에 따라서 환경설정(resources) 다르게 적용하기 file [1] 뭉충닷컴 2012-03-03 34746
9 일반 Spring 프로젝트를 Web 프로젝트로 변경하기 file 뭉충닷컴 2012-03-03 4311
8 URL과 Controller 간단하게 연결해주는 HandlerMapping 처리 방법 뭉충닷컴 2012-03-03 4497
» Spring에서 Session을 이용한 로그인 처리 예제 file [12] 뭉충닷컴 2012-03-02 60257
6 뷰 컨트롤러에서 ModelAndView 개체를 직접 생성하는 방법 뭉충닷컴 2012-03-01 6914
5 Root Application Context와 Servlet Context file 뭉충닷컴 2012-02-29 10067
4 STS의 Spring Template Project를 이용한 간단한 Spring MVC 웹 프로젝트 file [15] 뭉충닷컴 2012-02-29 13583
3 스테레오타입 어노테이션을 이용한 자동 빈 등록 file 뭉충닷컴 2012-02-28 2685
2 Spring에서 Bean 등록 여러가지 방법 뭉충닷컴 2012-02-28 4409
1 component:context-scan으로 설정되어있는 Bean들 확인하는 방법 file 뭉충닷컴 2012-02-24 3005