본문 바로가기

Backend/Spring & SpringBoot

[Spring Security] Spring Boot에서 Spring Security 설정하기 (in-memory)

728x90

# Spring Boot에서 Security를 어떻게 쓰는지 알아보겠다. 

0. 프로젝트 생성


1. Maven Dependency 추가  : Default Auto Configuration에 대해서 살펴보기.

(New Project에서 생성 Security > Spring Security 추가) 

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

 

=> spring-boot-starter-security 만 의존성 추가해도 많은 일이 생긴다. (Auto Configuration이 일어남.)

 

1) Authentication Manager bean이 in-memory에 저장되어 , default User가 생긴다. (login, logout page가 제공됨)

username : user , password : log에 뜸.

Default User의 password가 자동으로 생성됨.

2) Resource locations 들에는 접근이 불가하게 된다.

ex) /css/**, /js/**, /images/**, etc...

3) XSS, CSRF, caching, 등이 활성화 된다. 

 

ex) Spring Security 의존성 설정뒤, Auto Configuration이 어떻게 되는지 Test

 

> HomeController.java

@Controller
public class HomeController {

	@RequestMapping("/")
	public String home(){
		return "home";// template> home.html 으로 보내줌
	}
}

> home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1>home입니다.</h1>
</body>
</html>

> mvn build package

> mvn spring-boot:run

localhost:8080/ 으로 요청할시에, /login으로 redirect한다.

 

=> Default id인 user와, log에 세팅된 password을 기입하면 "/"으로 이동한다.

 

셋팅하고, "/" 로, home.html redirect됨.


2. application.properties에서 세팅해보기

> application.properties 

spring.security.user.name = zeroco
spring.security.user.password = zerocopw
spring.seucrity.user.roles = USER, ADMIN

: default User에 대해서 in-memory 단에서 세팅을 해본다. 

=> log에서 password 안 나오고, properties에서 설정한 id와 password를 통해 login 가능하다. 

application.properites에서 설정된, id, pw로 로그인이됨.


3. Config 파일로, Page Controller 설정하기, SpringSecurityDialect Bean등록

> page만 보내주는, Controller에 대해서 WebMvcConfigurer 인터페이스를 상속받아서 새롭게 정의한다. 

> SpringSecurityDialect를 Bean으로 등록하여, Thymeleaf에서 sec속성을 사용할 수 있다. 

 

> WebConfig.java

@Configuration
public class WebConfig implements WebMvcConfigurer{

	@Override
	public void addViewControllers(ViewControllerRegistry registry){
		registry.addViewController("/").setViewName("home");
	}

	@Bean
	public SpringSecurityDialect securityDialect(){
		return new SpringSecurityDialect();
	}

}

 

> home.html

<!DOCTYPE html> 
<html xmlns:th=http://www.thymeleaf.org
 	xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
    <head> 
        <title>스프링 시큐리티</title> 
    </head> 
    <body> 
         <h2>sec</h2> 
         <div sec:authorize="hasRole('USER')">user권한일 경우</div> 
         <div sec:authorize="hasRole('ADMIN')">admin권한일 경우</div> 
         <div sec:authorize="isAuthenticated()">로그인해서 인증을 받은 사람 </div>
인증받은 사람 :  <div sec:authentication="name"></div>
인증받은 사람의 권한 :  <div sec:authentication="principal.authorities"></div> 
     </body> 
</html>

application.properties에 설정된 user로 로그인 한 결과

 

 여기까지 기본적으로 의존성을 추가한 경우 어떻게 자동 설정이 되며, application.properties에 in-memory에 user를 설정해 두는 방법에 대해서 알아보았다. 또한 WebMvcConfigurer을 상속받아 설정을 하여 pageController 없이 편리하게 페이지 이동을 처리하는 방식에 대해 알아보았고, thymeleaf-extras-springsecurity5라는 의존성을 추가하여, 타임리프에서 sec 속성을 사용하여 html단에서 인증을 받았는지, 어떤 권한을 갖고 있는지 없는지에 대해서 판단하여 html을 보여주거나 안 보여주거나 할 수 있는 방법에 대해서 알 수 있었다.

 


# 다음글 : Database를 사용하여 Spring Security 설정하기 

 

[Spring Security] Spring Boot에서 Spring Security 설정하기 (Database)

# 구현 과정 1) Database를 사용하여 Role에 따라 Access Control 하도록 한다. - User JPA Entity, Role JPA Entity 가 필요하다. (N:M 매핑 관계로 함) - User와 Role entity와 관계된 Spring Data JPA reposito..

zeroco.tistory.com

 

728x90