JWT

JWT ํ† ํฐ์œผ๋กœ ๋กœ๊ทธ์ธ

  • ๋กœ๊ทธ์ธ์‹œ ์›๋ž˜๋Š” localhost:8080/login ์„ ํ˜ธ์ถœํ•˜๋ฉด ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ์•Œ์•„์„œ UserDetailsService ๋นˆ์„ ์ฐพ์•„ loadUserByUsername์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ filterChain ์—์„œ formLogin์„ disableํ•˜๊ณ  ์ปค์Šคํ…€ ํ•„ํ„ฐ๋ฅผ ๋“ฑ๋กํ•ด์„œ ๋กœ๊ทธ์ธ์„ ํ• ๊ฒƒ์ด๋‹ค.

SecurityConfig.java

security ๊ธฐ๋ณธ์— ์ ์–ด๋†“์€ config์™€ ๊ฐ™๋‹ค

@Configuration
@EnableWebSecurity // ์‹œํ๋ฆฌํ‹ฐ ํ™œ์„ฑํ™” -> ๊ธฐ๋ณธ ์Šคํ”„๋ง ํ•„ํ„ฐ์ฒด์ธ์— ๋“ฑ๋ก
public class SecurityConfig {

   @Autowired
   private UserRepository userRepository;

   @Autowired
   private CorsConfig corsConfig;

   @Bean
   SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
      return http
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .formLogin().disable()
            .httpBasic().disable()
            .apply(new MyCustomDsl()) // ์ปค์Šคํ…€ ํ•„ํ„ฐ ๋“ฑ๋ก
            .and()
            .authorizeRequests(authroize -> authroize.antMatchers("/api/v1/user/**")
                  .access("hasRole('ROLE_USER') or hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
                  .antMatchers("/api/v1/manager/**")
                  .access("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
                  .antMatchers("/api/v1/admin/**")
                  .access("hasRole('ROLE_ADMIN')")
                  .anyRequest().permitAll())
            .build();
   }

   public class MyCustomDsl extends AbstractHttpConfigurer<MyCustomDsl, HttpSecurity> {
      @Override
      public void configure(HttpSecurity http) throws Exception {
         AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class);
         http
               .addFilter(corsConfig.corsFilter())
               .addFilter(new JwtAuthenticationFilter(authenticationManager))
               .addFilter(new JwtAuthorizationFilter(authenticationManager, userRepository));
      }
   }

}

JwtAutenticationFilter.java

  • ๋กœ๊ทธ์ธ์‹œ ์‹คํ–‰๋˜๋Š” ํ•„ํ„ฐ๋ฅผ ์ƒ์†๋ฐ›์€ ํ•„ํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์„œ SecurityConfig ์— ๋“ฑ๋กํ•ด์ค˜์•ผํ•จ

  • UsernamePasswordAuthenticationFilter๋Š” AuthenticationManager๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•„์š”ํ•จ. ์œ„์˜ SecurityConfig.java์˜ ํ•„ํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณด๋ฉด AuthenticationManager ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋„˜๊ฒจ์ฃผ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Œ

  • PrincipalDetailsService ์™€ PrincipalDetails๋Š” security ๊ธฐ๋ณธ์— ์ž‘์„ฑ๋˜์–ด ์žˆ์Œ, ์ƒ์„ฑํ•ด์ค˜์•ผํ•จ

JwtProperties.java

Last updated