쌓고 쌓다
Spring Security 설정 및 로그인 페이지로 보내기 본문
먼저 시큐리티 사용을 위해 Gradle에 추가해주자.
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-security'
설정파일을 관리하기 위해 다음과 같이 폴더를 구성한다.
config 폴더에 SecurityConfig를 만들어준다.
SecurityConfig
package com.example.spotserver.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
//http.csrf(CsrfConfigurer::disable);
http.csrf(AbstractHttpConfigurer::disable);
http.authorizeHttpRequests(request ->
request
.requestMatchers("/user/**").authenticated()
.requestMatchers("/managers/**").hasAnyRole("ADMIN", "MANAGER")
.requestMatchers("/admin/**").hasAnyRole("ADMIN")
.anyRequest().permitAll())
.formLogin(formLogin -> formLogin
.loginPage("/login")
.defaultSuccessUrl("/"));
return http.build();
}
}
- @EnableWebSecurity : 스프링 시큐리티 필터가 스프링 필터 체인에 등록 됩니다.
- /user 포함 요청은 로그인 사용자만 사용이 가능하며 managers과 admin은 각 권한이 있어야 접근이 가능하다.
- anyRquest().permitAll() : 위의 3가지 요청외에는 모두 허용을 한다.
- loginPage : 로그인이 필요하다면 "/login" 페이지로 보낸다.
- defaultSuccessUrl : 로그인 성공시 보낼 페이지
아래의 요청 결과는 로그인 페이지로 리다이렉트하는 formLogin 메서드를 제외한 결과입니다.
로그인하지 않은 상태에서 "/user" 요청을 했더니 403에러 Forbidden이 발생한다.
403 에러는 서버에 요청이 도착했으나 권한 때문에 거절된 상황을 알린다.
권한이 필요없는 요청은 정상적으로 응답을 받을 수 있다.
'프로그래밍 > spring' 카테고리의 다른 글
Spring Security 로그인 (0) | 2024.01.16 |
---|---|
Spring Security 회원가입 및 BCrypt (0) | 2024.01.15 |
Resource, UrlResource? (1) | 2024.01.02 |
@RequestPart로 JSON과 파일 함께 처리하기 with Multipart (1) | 2023.12.29 |
API 오류 처리하는법 @ExceptionHandler (0) | 2023.12.04 |
Comments