Backend
home
🖋️

10일차

생성일
2024/07/22 16:09
태그
본 프로젝트는 “스프링부트 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
복사