본문 바로가기
Spring/Spring Security

Spring Security 실습2 - 커스텀 로그인 페이지 만들기

by 태옹 2021. 8. 20.

이전 게시물과 이어지는 내용입니다.

2021.08.20 - [Spring/개념지식 및 에러사항] - Spring Security 실습1 - url설계를 통한 접근 제한 방법

 

Spring Security 실습1 - url설계를 통한 접근 제한 방법

📌 해당 실습을 하기 전 아래의 게시물을 참고하여 스프링 시큐리티 설정을 완료해야합니다. 2021.08.19 - [Spring/개념지식 및 에러사항] - [Spring] Spring Web Security 설정하기 [Spring] Spring Web Security..

taetoungs-branch.tistory.com


커스텀 로그인 페이지

 

솔직히 스프링 시큐리티에서 기본적으로 제공하는 로그인 페이지는... 구리다.

구리다..구려

현실적으로 웹 서비스를 할 때 이런 화면 디자인을 사용하지 않는 경우가 대부분이기 때문에 별도의 URI를 이용해서 로그인 페이지를 다시 제작해서 사용하려고 한다.

 

security-context.xml을 아래와 같이 수정해준다.

<!--<security:form-login />--><!-- 삭제된 부분 -->
<security:form-login login-page="/customLogin"/><!-- 추가된 부분 -->

그러면 예상대로 /customLogin이라는 URI를 컨트롤러에 연결하여 기능을 작성해주고, customLogin.jsp 화면을 만들어 주는 작업을 하면 된다.

 

1) CommonController.java 수정

/customLogin와 매핑된 loginInput메소드를 추가한다.

@GetMapping("/customLogin")
public void loginInput(String error, String logout, Model model) {
    log.info("error"+error);
    log.info("logout"+logout);
    if(error!=null) {
    	model.addAttribute("error","Login Error Check Your Account");
    }
    if(logout!=null) {
    	model.addAttribute("logout","Logout!!");
    }
}

login-page속성의 URI는 반드시 GET방식으로 접근하는 URI를 지정해야 한다.

 

 

2) customLogin.jsp 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Custom Login Page</h1>
	<h2>
		<c:out value="${error}" />
	</h2>
	<h2>
		<c:out value="${logout}" />
	</h2>

	<form method="post" action="/login">
		<div>
			<input type="text" name="username" value="admin">
		</div>
		<div>
			<input type="password" name="password" value="admin">
		</div>
		<div>
			<input type="submit">
		</div>
		<div>
			<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
		</div>
	</form>
</body>
</html>

jsp파일에서 확인해볼 것은 다음 두 가지이다.

1. action="/login"

실제로 로그인의 처리 작업은 '/login'을 통해서 이루어지는데, 반드시 POST방식으로 데이터를 전송해야 한다.

id와 pw의 name속성은 기본적으로 username, password속성을 이용한다.

 

2. csrf

CSRF 토큰은 스프링 시큐리티에서 POST방식을 이용하는 경우 기본적으로 사용하게 된다. '사이트간 위조 방지'를 목적으로 특정한 값의 토큰을 사용하는 것이다. CSRF에 대해서는 다음 게시물에서 다시 소개해보겠다.

위의 코드처럼 crsf의 parameterName과 token을 EL형식으로 준 뒤 브라우저의 페이지 소스보기에서 확인해보면 아래와 같이 name에는 _csrf가, value에는 임의의 값이 지정된 것을 볼 수 있다.

페이지 소스 보기

서버를 실행시켜보면 아래와 같이 (그다지 디자인이 나아지진 않았지만🤷‍♀️ 테스트니까... 이쁜 로그인 페이지는 게시판 프로젝트에서 다시 작업해보는 걸로 하쟈) 커스텀한 로그인 페이지가 뜨고, 로그인에 성공한 경우 가장 처음에 뜨는 "Hello world!"페이지(home.jsp)로 이동한다.

 

/customLogin

로그인에 실패한 경우 에러메시지가 뜬다.

 

댓글