hanker

Spring Security (2) - 로그인, 로그아웃 설정 (xml) 본문

SPRING

Spring Security (2) - 로그인, 로그아웃 설정 (xml)

hanker 2020. 8. 13. 23:16

1. pom.xml 추가설정

 

<!-- 태그 라이브러리 추가 -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-taglibs</artifactId>
	<version>${org.springframework-version}</version>
</dependency>

 

 

2. security-context.xml 설정 변경

<security:http use-expressions="true">
	<security:intercept-url pattern="/login/loginForm" access="permitAll" /> 
	<security:intercept-url pattern="/" access="hasRole('USER')" />
	<security:intercept-url pattern="/admin/**" access="hasRole('ADMIN')" />
	<security:form-login login-page="/login/loginForm" default-target-url="/" 
							authentication-failure-url="/login/loginForm?error"
							username-parameter="id" password-parameter="password" />
	<security:logout logout-url="/logout" logout-success-url="/login/loginForm" />
	<security:access-denied-handler error-page="/login/accessDenied"/>
</security:http>
<!-- 
	access= "permitAll" ( 누구나 접근 가능 )
			"hasRole('ADMIN')" (ADMIN 권한을 가지고 있는 유저만 접근 가능)
			"hasAnyRole('USER','ADMIN') (USER 또는 ADMIN 권한을 가지고 있는 유저는 접근 가능)
 -->
 
 <!-- 
 	login-page : 로그인 페이지 URL
 	default-target-url : 로그인 후 보여질 페이지
 	authentication-failure-url : 로그인 실패시 보여질 페이지
 	username-parameter : 아이디 입력 필드에 사용될 name
 	password-parameter : 비밀번호 입력 필드에 사용될 password
  -->
	  
  <!-- 
  	logout-url : 로그아웃 페이지 URL
  	logout-success-url : 로그아웃에 성공하였을 때 보여질 페이지
   -->
<!-- provider -->
<security:authentication-manager>
	<security:authentication-provider>
		<security:user-service>
			<security:user name="user" password="password" authorities="ROLE_USER" />
			<security:user name="admin" password="password" authorities="ROLE_ADMIN" />
		</security:user-service>
	</security:authentication-provider>
</security:authentication-manager>

 

현재 프로젝트 구조

 

 

화면은 무료 템플릿을 사용을 하겠습니다.

home.jsp

https://templated.co/assembly

 

Assembly by TEMPLATED

A nice modern business-style design.

templated.co

링크를 누르시면 무료로 다운받을 수 있습니다.

 

loginForm.jsp

https://colorlib.com/wp/template/login-form-v1/

 

Login Form v1 by Colorlib - Free HTML Login Form 2020 - Colorlib

Thank you for visiting Colorlib and reading this article! We highly appreciate it! Now you might want to learn how to make a website using our free WordPress themes.

colorlib.com

링크를 누르시면 무료로 다운받을 수 있습니다.

 

3. loginForm.jsp 수정

 - security-context.xml에 설정한 대로 name값 변경

 - jsp 상단에 c태그, form태그 사용을 위한 소스 추가

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

 

4. /login/loginForm , /home 접속을 위한 Controller 설정

- LoginController 작성

@RequestMapping(value="/login/loginForm", method=RequestMethod.GET)
public void getLoginForm() throws Exception{
	
}
	
@RequestMapping(value="/login/loginForm", method=RequestMethod.POST)
public String postLoginForm() throws Exception{
	
	return "login/loginForm";
}

- HomeController

@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
	
	return "home";
}

 

이제 화면 UI를 확인해보면 

<login/loginForm>

화면이 나오고 security-context에서 설정한 id, password 입력후 login 버튼 클릭

 

로그인이 성공하면 

다운로드 받았던 템플릿 화면으로 이동

 

로그아웃 설정

 

5.home.jsp 

<style>
#loginOut{
    top: 40px;
    right: 40px;
    position: absolute;
    background: transparent;
    outline:none;
    border:none;
    color:white;
    }
</style>
<!-- 로그인 Style 지정 -->
<body>
<div id="header-wrapper">
	<sec:authorize access="isAnonymous()"> 
		<p><a href="<c:url value="/login/loginForm" />" id="loginOut" >로그인</a></p> 
	</sec:authorize>

	<sec:authorize access="isAuthenticated()">
		<form:form action="${pageContext.request.contextPath }/logout" method="POST">
			<input type = "submit" id="loginOut" value="로그아웃" />
		</form:form>
	</sec:authorize>
    
    <!-- 이하생략 -->

로그인 전

 

 

로그인 후

 

 

다음 글 - Spring security DB 연동 / 관리