WebSecurityConfig

song yuheon·2023년 9월 4일
0

Spring

목록 보기
48/93
post-thumbnail
post-custom-banner


WebSecurityConfig Init & Field

/**
 * AuthenticationManager를 Bean으로 등록
 * @param configuration 인증을 위한 설정
 * @return AuthenticationManager 객체 반환
 * @throws Exception 예외 처리
 */
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
    return configuration.getAuthenticationManager();
}

/**
 * JWT 토큰을 검증하고 인증하는 필터
 * @return JwtAuthorizationFilter 객체 반환
 */
@Bean
public JwtAuthorizationFilter jwtAuthorizationFilter() {
    return new JwtAuthorizationFilter(jwtUtil, userDetailsService);
}

/**
 * 로그인 및 JWT 토큰을 생성하기 위한 필터
 * @return JwtAuthenticationFilter 객체 반환
 * @throws Exception
 */
@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter() throws Exception {
    JwtAuthenticationFilter filter = new JwtAuthenticationFilter(jwtUtil);
    filter.setAuthenticationManager(authenticationManager(authenticationConfiguration));
    return filter;
}

SecurityFilterChain()


    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        /**
         * CSRF 설정
         * - CSRF 토큰을 사용하지 않음
         * - CSRF 토큰을 사용하면, CSRF 토큰을 포함하지 않은 요청은 모두 차단됨
         */
        http.csrf((csrf) -> csrf.disable());

        /**
         * Session 방식이 아닌 JWT 토큰 방식을 사용하도록 설정
         */
        http.sessionManagement((sessionManagement) ->
                sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        );

        /**
         * /api/user/ 아래 모든 요청은 인증 없이 접근 가능하도록 설정
         * GET 메소드 요청은 인증 없이 접근 가능하도록 설정
         * 그 외 모든 요청은 인증을 필요로 함
         */
        http.authorizeHttpRequests((authorizeHttpRequests) ->
                authorizeHttpRequests
                        .requestMatchers("/api/user/**").permitAll() // 메모 관련 API 접근 허용 설정
                        .requestMatchers(HttpMethod.GET).permitAll() // GET 메소드 요청 허용 설정
                        .anyRequest().authenticated() // 그 외 모든 요청 인증처리
        );

        /**
         * JWT 토큰을 검증하고 인증하는 필터 ( JWTAuthorizationFilter ) 를 JwtAuthenticationFilter 앞에 설정
         * 로그인 및 JWT 토큰을 생성하기 위한 필터 ( JwtAuthenticationFilter ) 를 UsernamePasswordAuthenticationFilter 앞에 설정
         */
        http.addFilterBefore(jwtAuthorizationFilter(), JwtAuthenticationFilter.class);
        http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);

        /**
         * http.build() 메소드를 통해 설정한 내용을 적용하여 SecurityFilterChain 객체를 생성하여 반환
         */
        return http.build();

    }

profile
backend_Devloper
post-custom-banner

0개의 댓글