스프링 시큐리티 태그로 로그인 페이지 구현
앞서 배운 스프링 시큐리티 태그로 로그인 페이지를 구현합니다.
security.context.xml
시큐리티 태그 <form-login> 태그로 로그인 관련 내용을 설정해줍니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<http use-expressions="true">
<intercept-url pattern="/books/add" access="hasAuthority('ROLE_ADMIN')"/>
<form-login login-page="/login"
default-target-url="/books/add"
authentication-failure-url="/loginfailed"
username-parameter="username"
password-parameter="password"/>
<csrf/>
<logout/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="Admin" password="{noop}Admin1234" authorities="ROLE_ADMIN"/>
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
로그인 페이지의 경로,
인증 성공 시 이동 페이지의 경로,
인증 실패 시 이동 페이지의 경로,
사용자 계정 이름과 비밀번호를 설정해줍니다.
LoginController.java
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class LoginController {
@RequestMapping("/login")
public String login() {
return "login";
}
@RequestMapping("/loginfailed")
public String loginerror(Model model) {
model.addAttribute("error","true");
return "login";
}
}
앞서 설정 파일에서 선언한 /login, /loginfailed 경로에 대해 매핑 요청 처리 메소드를 작성해줍니다.
/loginfailed로 이동 시에는 모델 속성 error에 true 값을 저장합니다.
login.jsp
/WEB-INF/views 폴더에 jsp 파일을 생성하고 다음과 같이 작성해줍니다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet">
<title>로그인</title>
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="./home">Home</a>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">로그인</h1>
</div>
</div>
<div class="container col-md-4">
<div class="text-center">
<h3 class="form-signin-heading">Please login</h3>
</div>
<c:if test="${not empty error }">
<div class="alert alert-danger">
UserName과 Password가 올바르지 않습니다.<br/>
</div>
</c:if>
<form class="form-signin" action="<c:url value="/login"/>" method="post">
<div class="form-group row">
<input type="text" name="username" class="form-control"
placeholder="User Name" required autofocus>
</div>
<div class="form-group row">
<input type="password" name="password" class="form-control"
placeholder="Password" required>
</div>
<div class="form-group row">
<button class="btn btn-lg btn-success btn-block" type="submit">로그인</button>
<input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }"/>
</div>
</form>
</div>
</body>
</html>
만약 error에 저장된 값이 있다면 오류 메시지를 출력합니다.
로그인 실패 시 error에 true 값이 저장되고 다시 login.jsp 파일로 돌아오기 때문에
오류 메시지가 출력될 것입니다.
실행 결과
톰캣 서버 실행 후 'http://localhost/BookMarket/login'을 입력해줍니다.
username과 password를 임의로 입력하고 [로그인] 버튼을 눌러보겠습니다.
시큐리티 설정 파일에 의해 /loginfailed 경로로 이동되어
컨트롤러에 의해 error에 true 값이 저장되고 다시 login 뷰 페이지로 이동됩니다.
이번에는 Admin, Admin1234를 입력하고 [로그인] 버튼을 누르겠습니다.
사용자 인증 성공 후 /books/add 경로로 이동한 것을 확인했습니다.
'SPRING' 카테고리의 다른 글
[SPRING]#27 도서 쇼핑몰 구현 (파일 업로드1) (0) | 2024.01.11 |
---|---|
[SPRING]#26 도서 쇼핑몰 구현 (스프링 시큐리티8) (0) | 2024.01.11 |
[SPRING]#24 도서 쇼핑몰 구현 (스프링 시큐리티6) (0) | 2024.01.10 |
[SPRING]#23 도서 쇼핑몰 구현 (스프링 시큐리티5) (0) | 2024.01.10 |
[SPRING]#22 도서 쇼핑몰 구현 (스프링 시큐리티4) (0) | 2024.01.10 |