본문 바로가기

공부/Spring

스프링 부트 3 백엔드 개발자 되기_16

WebSecurityConfig클래스 오류

 

 

@RequiredArgsConstructor
@Configuration
public class WebSecurityConfig {

    private final UserDetailService userService;

    //스프링 시큐리티 기능 비활성화
    //스프링 시큐리티의 모든 기능을 사용하지 않게 설정하는 코드다
    //인증인가 서비스를 모든 곳에 적용하지 않는다는것, 일반적으로 정적 리소스(이미지,html파일)에 설정
    @Bean
    public WebSecurityCustomizer configure(){
        return (web) -> web.ignoring()
                .requestMatchers(toH2Console())
                .requestMatchers("/static/**");
    }


    //특정 HTTP 요청에 대한 웹 기반 보안 구성
    //이 메서드에서 인증/인가 및 로그인,로그아웃 관련 설정이 가능
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
                .authorizeRequests() //인증,인가 설정(특정 경로에 대한 액세스 설정)
                .requestMatchers("/login", "/signup", "/user").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()  //폼 기반 로그인 설정
                .loginPage("/login")
                .defaultSuccessUrl("/articles")
                .and()
                .logout()
                .logoutSuccessUrl("/login")
                .invalidateHttpSession(true)
                .and()
                .csrf().disable()  //csrf 비활성화
                .build();
    }

...(중략)...

WebSecurityCustomizer 여기랑, SecurityFilterChain 기능이 안돼서 찾아봤더니 
https://velog.io/@yewo2nn16/Spring-Spring-Security%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

WebSecurityConfig클래스에 @EnableWebSecurity 라는 어노테이션을 쓰면 될것 같음
=> @EnableWebSecurity 추가했는데 에러뜸
=>https://velog.io/@ino5/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0-dependency-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0 참고해서

implementation 'org.springframework.boot:spring-boot-starter-security' 추가했더니 됨

 

###############################



//logout Get  요청을 하면 로그아웃을 담당하는 헨들러인 SecurityContextLogoutHandler의 logout()메서드를 호출해서 로그아웃함
    @GetMapping("/logout")
    public String logout(HttpServletRequest request, HttpServletResponse response) {
        new SecurityContextLogoutHandler().logout(request, response,
                SecurityContextHolder.getContext().getAuthentication());
        return "redirect:/login";
    }

#################################

다음 8.6.2로그아웃 뷰 추가하기부터 하면됨