• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Users Microservice - AuthenticationFilter 추가 | 질문있습니다.

22.11.14 23:50 작성 조회수 1.14k

1

최신버전의 스프링부트에서 WebSecurityConfigurerAdapter가 더이상 지원하지 않는다고 하는데 WebSecurity클래스의 코드를 어떻게 작성해야 하나요? 빈 등록 하라고 하는데 정확히 어떤식으로 진행해야할지 몰라서 이렇게 남깁니다. 항상 좋은 강의 감사합니다.

답변 1

답변을 작성해보세요.

2

seonjun Moon님의 프로필

seonjun Moon

2022.12.06

우선은 무시하고 그냥 동이랗게 진행하시고, 나중에 찾아서 해보시길 바랍니다.

그거 하다 보면 엄청많은 문제에 직면하면서 본래 강의를 못들을겁니다... 저는 전에 하다가 죽을뻔햇습니다...

정 궁금하시면 여기 사이트 참고하시면 됩니다.

https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

저는 많은 시행착오와 위의 사이트 참고, 그리고 다른 spring security 강의를 들어서 다음과같이 수정이 가능햇습니다.!

 

package com.example.userservice.security;

import com.example.userservice.jpa.UserRepository;
import com.example.userservice.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.env.Environment;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    private UserService userService;
    private AuthenticationConfiguration authenticationConfiguration;
    private Environment env;

    @Autowired
    public void setUserService(@Lazy UserService userService) {
        this.userService = userService;
    }

    @Autowired
    public void setAuthenticationConfiguration(AuthenticationConfiguration authenticationConfiguration) {
        this.authenticationConfiguration = authenticationConfiguration;
    }

    @Autowired
    public void setEnv(Environment env) {
        this.env = env;
    }

    @Bean
    public AuthenticationManager authenticationManager() throws Exception{
        return this.authenticationConfiguration.getAuthenticationManager();
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf().disable();
//        http.authorizeRequests().antMatchers("/users/**").permitAll();
        http.authorizeRequests().antMatchers("/**")
                .permitAll().and().addFilter(getAuthenticationFiler());
//                .antMatchers("/**")
//                .hasIpAddress("192.168.219.101")
//                .and()
//                .addFilter(getAuthenticationFiler());

        http.headers().frameOptions().disable();
        return http.build();
    }

    @Bean
    public AuthenticationFilter getAuthenticationFiler() throws Exception {
        AuthenticationFilter authenticationFilter = new AuthenticationFilter();
        authenticationFilter.setAuthenticationManager(authenticationManager());
        return authenticationFilter;
    }

    @Bean
    AuthenticationManager authenticationManager(AuthenticationManagerBuilder builder) throws Exception {
        return builder.userDetailsService(userService).passwordEncoder(passwordEncoder()).and().build();
    }


}

기본적으로 deprecated 된 방식 말고 새로운 방식은 bean을 중점적으로 등록하는 방식으로 진행됩니다. 그렇기 때문에 어떤 bean을 수정해야 하는지 spring security 를 좀 아셔야합니다.