티스토리 뷰

🎆🎈🎇🎠🎡🎢

환상의~ 나라로 오세 요~♪(´▽`)

 

 

 

 

pom.xml

      <!-- Spring Security -->   
        <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-web</artifactId>
             <version>5.6.3</version>
        </dependency>
        <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-config</artifactId>
             <version>5.6.3</version>
        </dependency>

 

 

 

web.xml

   <filter>
      <filter-name>springSecurityFilterChain</filter-name> 
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
   </filter>
   <filter-mapping>
      <filter-name>springSecurityFilterChain</filter-name> 
      <url-pattern>/*</url-pattern> 
   </filter-mapping>

 

 

 

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring/root-context.xml
      				/WEB-INF/spring/security-context.xml</param-value>
   </context-param>

 

 

 

 

 

security-context.xml

<?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
                                 https://www.springframework.org/schema/security/spring-security.xsd">
   
   
   <http use-expressions="true">
       <intercept-url pattern="/books/add"  access="hasAuthority('ROLE_ADMIN')" />
        <form-login/>
        <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>

 

 

 

/bookmarket/books/add를 url 주소창에 넣으면 

아래 login 창으로 이동한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

8.4.3 스프링 시큐리티 태그로 로그인 페이지 구현하기

 

security-context.xml

   <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>

 

 

LoginController.java

package com.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class LoginController {
	
	@GetMapping("/login")
	public String login() {
		return "login";
	}
	
	@GetMapping("/loginfailed")
	public String loginerror(Model model) {
		model.addAttribute("error", "true");
		return "login";
	}
	

}

 

 

login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!DOCTYPE html>
<html>
<head>
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<meta charset="utf-8">
<title>로그인</title>
</head>
<body>
	<nav class="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-siginin-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>

 

 

 

/books/add 로 이동

 

 

 

 

8.4.4 스프링 시큐리티 태그로 로그아웃 페이지 구현하기

 

security-context.xml

   <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 logout-success-url="/logout"/>
    </http>

 

 

LoginController.java

package com.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class LoginController {
	
	@GetMapping("/login")
	public String login() {
		return "login";
	}
	
	@GetMapping("/loginfailed")
	public String loginerror(Model model) {
		model.addAttribute("error", "true");
		return "login";
	}
	
	@GetMapping("/logout")
	public String logout(Model model) {
		return "login";
	}
}

 

 

addBook.jsp  +추가 구문

<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">
		<div class="float-right">
			<form:form action="${pageContext.request.contextPath }/logout" method="post">
				<input type="submit" class="btn btn-sm btn-success" value="Logout" />
			</form:form>
		</div>
		<br><br>
		<form:form modelAttribute="NewBook" class="form-horizontal">

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday