로그인과 로그아웃 처리
스프링 시큐리티 태그를 이용해서 로그인과 로그아웃 기능을 구현하고
로그인으로 인증된 사용자만 특정 페이지에 접근가능하도록 권한을 가지고
로그아웃 시 인증된 사용자가 해제되도록 만들어봅니다.
<form-login> 태그
인증되지 않은 사용자가 특정 경로에 접근하거나 사용자 인증이 필요할 때 로그인 페이지를 보여줄 때
사용합니다.
다음 <form-login> 태그의 속성들을 사용해서 로그인 페이지를 출력하고 사용자 정보를 전송합니다.
속성 | 설명 |
login-page | 로그인 페이지 경로를 지정 |
login-processing-url | 로그인 요청 처리 경로 지정 <form> 태그의 action 속성 값 설정 |
default-target-url | 로그인에 성공하면 이동할 기본 경로 지정 |
always-use-default-target | true 값으로 설정 시, 항상 default-target-url 속성의 설정된 경로로 시작 |
username-parameter | 로그인할 때 사용자 계정 이름에 대한 파라미터 이름 설정 |
password-parameter | 로그인할 때 사용자 비밀번호에 대한 파라미터 이름 설정 |
다음은 <form-login> 태그를 사용한 예시입니다.
<?xml version="1.0" encoding="UTF-8"?>
<http...>
<form-login login-page="/login"
login-processing-url="/login"
default-target-url="/admin"
username-parameter="username"
password-parameter="password"
authentication-failure-url="/user/loginform?error=true"
/>
</http>
/login 으로 로그인 페이지를 호출하고 로그인 요청을 처리합니다.
로그인에 성공하면 /admin으로 자동으로 이동합니다.
로그인 페이지에서 입력한 사용자 계정 이름과 비밀번호는
username과 password로 전달받습니다.
만약 로그인에 실패하면 /user/loginform으로 자동으로 이동합니다.
<logout> 태그
로그아웃을 처리하는 데 사용됩니다.
다음 <logout> 태그의 속성들로 로그아웃 페이지를 출력할 수 있습니다.
속성 | 설명 |
delete-cookies | 로그아웃에 성골할 때 삭제할 쿠키 이름을 지정 콤마로 구분 |
invalidate-session | 로그아웃할 때 세션을 제거할지 지정 기본값은 true |
logout-success-url | 로그아웃에 성골할 때 이동할 경로 지정 기본값은 /login?logout |
logout-url | 로그아웃 요청 처리 경로 지정 <form> 태그의 action 속성 지정 값 설정 |
success-handler-ref | 로그아웃에 성공할 때 이동을 제어하려면 LogoutSuccessHandler 지정 |
다음은 <logout> 태그를 사용한 예시입니다.
<http>
<logout logout-url="/logout"
logout-success-url="/logout"
/>
</http>
/logout 으로 로그아웃 페이지를 호출합니다.
로그아웃에 성공할 때 /logout으로 자동 이동합니다.
다음은 위에서 배운 로그인과 로그아웃 처리 예시입니다.
다음과 같이 컨트롤러를 작성해줍니다.
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Example04Controller {
@RequestMapping("/loginpage")
public String requestMethod(Model model) {
return "loginform";
}
@RequestMapping("/admin")
public String requestMethod2(Model model) {
return "webpage08_04";
}
@RequestMapping("/logout")
public String logout(Model model) {
return "loginform";
}
}
/login 으로 경로를 설정하게 되면 스프링 시큐리티에서 지원하는 로그인 페이지로 넘어가기 때문에
직접 설정한 뷰 페이지로 넘기기 위해서 /loginpage로 매핑해주었습니다.
시큐리티 파일에서도 /login을 /loginpage로 바꾸어 주었습니다.
다음은 loginform.jsp 입니다.
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>로그인</title>
</head>
<body>
<h1>로그인</h1>
<form action="./loginpage" method="post">
<p>사용자명 <input type="text" name="username" placeholder="username">
<p>비밀번호 <input type="password" name="password" placeholder="password">
<p><button type="submit">로그인</button>
<input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }"/>
</form>
</body>
</html>
다음은 로그인 성공 시 보이는 페이지인 webpage08_04.jsp 입니다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<html>
<head>
<title>Security</title>
</head>
<body>
<h2>스프링 시큐리티 예</h2>
<sec:authorize access="isAuthenticated()">
<h5><sec:authentication property="principal.username"/>님, 반갑습니다.</h5>
<form action="./logout" method="POST">
<button type="submit">LOGOUT</button>
<input name="${_csrf.parameterName }" type="hidden" value="${_csrf.token }" />
</form>
</sec:authorize>
</body>
</html>
톰캣 서버 실행 후 'http://localhost/chap08/loginpage'를 입력해줍니다.
관리자 권한을 가진 username과 pasword를 입력해줍니다.
관리자 권한 username과 password는 시큐리티 파일에 있습니다.
[로그인] 버튼을 누르게 되면
이렇게 /admin 페이지로 이동하게 됩니다.
[로그아웃] 버튼을 누르게 되면
/logout으로 이동하게 됩니다.
'SPRING' 카테고리의 다른 글
[SPRING]#26 도서 쇼핑몰 구현 (스프링 시큐리티8) (0) | 2024.01.11 |
---|---|
[SPRING]#25 도서 쇼핑몰 구현 (스프링 시큐리티7) (0) | 2024.01.10 |
[SPRING]#23 도서 쇼핑몰 구현 (스프링 시큐리티5) (0) | 2024.01.10 |
[SPRING]#22 도서 쇼핑몰 구현 (스프링 시큐리티4) (0) | 2024.01.10 |
[SPRING]#21 도서 쇼핑몰 구현 (스프링 시큐리티3) (0) | 2024.01.10 |