본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
시큐리티 설정하기
•
requestMathcers(): 특정 요청과 일치하는 url에 대한 액세스를 설정한다.
•
permitAll(): 누구나 접근이 가능하게 설정한다.
•
anyRequest(): 위에서 설정한 url 이외의 요청에 대해 설정한다.
•
loginPage(): 로그인 페이지 경로 설정한다.
•
defaultSuccessUrl(): 로그인이 완료되었을 때 이동할 경로를 설정한다.
•
logoutSuccessURl(): 로그아웃이 완료되었을 때 이동할 경로를 설정한다.
•
invalidateHttpSession(): 로그아웃 이후에 세션을 전체 삭제할지 여부를 결정한다.
•
userDetailService: 사용자 정보를 가져올 서비스를 설정한다. 이때 설정하는 서비스 클래스는 반드시 UserDetailsService를 상속받은 클래스여야 한다.
•
passwrodEncoder(): 비밀번호를 암호화하기 위한 인코더를 설정한다.
package com.example.msblog.config;
import com.example.msblog.service.UserDetailService;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
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.configuration.WebSecurityCustomizer;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import static org.springframework.boot.autoconfigure.security.servlet.PathRequest.toH2Console;
@RequiredArgsConstructor
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
private final UserDetailService userService;
// 스프링 시큐리티 기능 비활성화
@Bean
public WebSecurityCustomizer configure() {
return (web -> web.ignoring()
.requestMatchers(toH2Console())
.requestMatchers("/static/**"));
}
// 특정 HTTP 요청에 대한 웹 기반 보안 구성
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable) // csrf 비활성화
.authorizeHttpRequests((authorize) -> authorize // 인증, 인가 설정
.requestMatchers("/signup", "/user", "/login").permitAll()
.anyRequest().authenticated())
.formLogin(formLogin -> formLogin // 폼 기반 로그인 설정
.loginPage("/login")
.defaultSuccessUrl("/articles"))
.logout((logout) -> logout // 로그아웃 설정
.logoutSuccessUrl("/login")
.invalidateHttpSession(true));
return http.build();
}
// 인증 관리자 관련 설정
@Bean
public DaoAuthenticationProvider daoAuthenticationProvider() throws Exception {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setUserDetailsService(userService);
daoAuthenticationProvider.setPasswordEncoder(passwordEncoder());
return daoAuthenticationProvider;
}
@Bean
public static PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}
Java
복사

