# 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에 뜸.
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
=> Default id인 user와, log에 세팅된 password을 기입하면 "/"으로 이동한다.
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 가능하다.
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에 in-memory에 user를 설정해 두는 방법에 대해서 알아보았다. 또한 WebMvcConfigurer을 상속받아 설정을 하여 pageController 없이 편리하게 페이지 이동을 처리하는 방식에 대해 알아보았고, thymeleaf-extras-springsecurity5라는 의존성을 추가하여, 타임리프에서 sec 속성을 사용하여 html단에서 인증을 받았는지, 어떤 권한을 갖고 있는지 없는지에 대해서 판단하여 html을 보여주거나 안 보여주거나 할 수 있는 방법에 대해서 알 수 있었다.
# 다음글 : Database를 사용하여 Spring Security 설정하기
'Backend > Spring & SpringBoot' 카테고리의 다른 글
Hypermedia-Driven RESTful Web Services : HATEOAS란? [1] (0) | 2022.04.18 |
---|---|
[Spring Security] Spring Boot에서 Spring Security 설정하기 (Database) (0) | 2022.04.13 |
[WEB] URI 규칙 10가지 (0) | 2022.03.09 |
[JPA] JPA / Hibernate Cascade Types 요약 (0) | 2022.03.09 |
[Spring Boot] Spring Boot 의 특징 (0) | 2022.03.08 |