반응형
의존성 추가
- Spring Boot DevTools
- Spring Web
- Lombok
- Thymeleaf
- Spring Data JPA
- MariaDB Driver
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
implementation 'org.thymeleaf.extras:thymeleaf-extras-java8time'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/securitydb
spring.datasource.username=dutmdcjf
spring.datasource.password=dutmdcjf
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
spring.thymeleaf.cache=false
프로젝트 생성시 간단 확인
- 자동 생성되는 로그인 페이지
- 임시 아이디: "user"
임시 비밀번호: console 창에 security password 생성된다. - 아직 어떠한 컨트롤러도 생성하지 않았기에 정상적인 화면 출력이 되지 않는다.
SecurityConfig 설정 클래스
- Spring Security의 설정 클래스를 만들때
WebSecurityConfigurerAdapter를 상속받아 기능을 쉽게 설정한다.
WebSecurityConfigurerAdapter는 Deprecated 되었다.
대체된 방법은 다음 포스팅을 클릭하면 된다.
- SecurityConfig 설정 클래스를 작성하기 앞서 스프링 시큐리티의 흐름을 이해하는 것이 더욱 효과적인 방법이란 것을 알 것이다. Spring Security의 핵심 개념인 Spring Security 흐름 & 인증 & 인가(Authentication & Authorization) 에 대한 포스팅을 봐보도록 하자.
- Spring Boot 2.0부터 인증을 위해선 PasswordEncoder를 지정해주어야 한다.
Spring Security에서 자체적으로 제공하는 PasswordEncoder도 있으므로 이를 SecurityConfig 설정 클래스에 Bean으로 주입해주어야 한다.
@Configuration
public class SecurityConfig {
@Bean
PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
- 사용자를 SecurityConfig 설정 파일 내에서 생성할 경우
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User.builder()
.username("user1")
.password(passwordEncoder().encode("1111"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
- 인가를 위한 접근 제한 설정
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((auth) -> {
auth.antMatchers("/sample/all").permitAll();
auth.antMatchers("/sample/member").hasRole("USER");
});
http.formLogin();
http.logout();
//http.csrf().disable();
return http.build();
}
- '/sample/all'로 별도의 로그인 없이 접속 가능 (익명사용자도 접속 가능)
- '/sample/member'로 USER 권한이 있는 사용자만 접속 가능
- formLogin(): 인가/인증 실패 경우 로그인 페이지 보여주도록 설정(로그인 방식 설정)
- logout(): CSRF 토큰을 사용할 때는 반드시 POST 방식으로 로그아웃 처리해야 한다.
CSRF 토큰을 비활성화할 시 GET 방식으로도 로그아웃 가능하다. - Spring Security는 기본적으로 CSRF 공격을 방어하기 위해 GET 방식을 제외한 모든 요청 방식에 CSRF 토큰값을 hidden 값으로 보내준다. 만약 csrf 토큰을 비활성화하고 싶다면 위와 같이 주석부분을 추가해주면 된다.
반응형
'Spring Security' 카테고리의 다른 글
Thymeleaf에서 Spring Security 이용 (0) | 2022.10.15 |
---|---|
WebSecurityConfigurerAdapter Deprecated (0) | 2022.10.14 |
Spring Security @PreAuthorize, @PostAuthorize, @Secured (0) | 2022.10.02 |
Spring Security Session을 이용한 구현 예제 (0) | 2022.09.29 |
Spring Security 스프링 시큐리티 이해하기 (0) | 2022.09.29 |