인프런 커뮤니티 질문&답변

terrinens님의 프로필 이미지
terrinens

작성한 질문수

Spring Boot JWT Tutorial

JWT 코드, Security 설정 추가

8:45 spring security 3.1.5 설정 방법 (버전 안 맞춰서 안될때)

해결된 질문

작성

·

2K

·

수정됨

1

spring security 3.1.5 버전 방식입니다.
기존에 implement 하지 않고 클래스를 @configuration 해서
구성 파일로 인식하게 만들고 해당 메서드를 @bean 을 주입시켜 사용하는 방식입니다.
처음 참조할 부분은 여기를 참조 하시면 됩니다. 처음 설정 방법 :: 3.1.5  

 

방법 1

  1. SecurityConfig::SecurityFilterChain 메서드를 수정하기

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf(AbstractHttpConfigurer::disable)

                .exceptionHandling((handling) ->
                        handling.authenticationEntryPoint(jwtAuthenticationEntryPoint)
                                .accessDeniedHandler(jwtAccessDeniedHandler)
                )

                .headers((header) ->
                        header.frameOptions(
                                HeadersConfigurer.FrameOptionsConfig::sameOrigin
                        )
                )

                .authorizeHttpRequests((registry) ->
                        registry.requestMatchers("/api/hello").permitAll()
                                .requestMatchers("/api/authentication").permitAll()
                                .requestMatchers("/api/signup").permitAll()
                                .anyRequest().authenticated()
                );
        return httpSecurity.build();
    }

 

방법 2

  1. JwtSecurityConfig에 메서드를 하나 추가 한다.

    public HttpSecurity configureAndReturn(HttpSecurity httpSecurity) {
        httpSecurity.addFilterBefore(
                new JwtFilter(tokenProvider),
                UsernamePasswordAuthenticationFilter.class
        );
        return httpSecurity;
    }
  1. SecurityConfig::SecurityFilterChain 메서드를 수정하기

@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
    return new JwtSecurityConfig(tokenProvider).configureAndReturn(
            httpSecurity
                    .csrf(AbstractHttpConfigurer::disable)

                    .exceptionHandling((handling) ->
                            handling.authenticationEntryPoint(jwtAuthenticationEntryPoint)
                                    .accessDeniedHandler(jwtAccessDeniedHandler)
                    )
                        .headers((header) ->
                            header.frameOptions(
                                    HeadersConfigurer.FrameOptionsConfig::sameOrigin
                            )
                    )

                    .authorizeHttpRequests((registry) ->
                            registry.requestMatchers("/api/hello").permitAll()
                                    .requestMatchers("/api/authentication").permitAll()
                                    .requestMatchers("/api/signup").permitAll()
                                    .anyRequest().authenticated()
                    )
    ).build();
}

 

개인적으로는 방법 1이 깔끔하다고 느낍니다.

답변 2

0

정은구님의 프로필 이미지
정은구
지식공유자

안녕하세요 🙂

Spring Boot 3.4.0 (SNAPSHOT) 버전에 맞춰 샘플 코드를 업데이트했습니다.

아래 링크에서 Java와 Kotlin 버전의 최신 샘플 코드를 확인하실 수 있으니 참고 부탁드립니다.

Javahttps://github.com/SilverNine/spring-boot-jwt-tutorial

Kotlinhttps://github.com/SilverNine/spring-boot-jwt-tutorial-kotlin

0

terrinens님의 프로필 이미지
terrinens
질문자

코드 설정에서 몇 가지 빠진 부분이 있어 댓글로 달아요.
게시글 수정이 안되네요...

### 방법 1, 2 둘다 넣어주세요 ###
.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

### 방법 1 에서만 넣어주세요 !체인 메서드 마지막 부분에 추가할 코드! ###
.apply(new JwtSecurityConfig(tokenProvider))

안녕하세요! 기존에 depreciated 된 부분을 제외하고, 람다식으로 새롭게 올려주신 방법 잘 찹고하였습니다.

그런데 댓글로 추가 달아주신, .apply(new JwtSecurityConfig(tokenProvider)); 또한 'apply(C)' is "deprecated since version 6.2 and marked for removal" 라고 뜨는데... 혹시 어떻게 고쳐야하는지 알 수 있을까요?

terrinens님의 프로필 이미지
terrinens

작성한 질문수

질문하기