ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Security JWT - 시큐리티 설정
    Framework & Library/Spring Security 2021. 10. 7. 19:43

    User 객체 생성

    @Data
    @Entity
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        private String username;
    
        private String password;
    
        private String roles;
    
        public List<String> getRoleList() {
            if (this.roles.length() > 0)
                return Arrays.asList(this.roles.split(","));
    
            return new ArrayList<>();
        }
    }

    model 패키지를 만든 후 사용자의 정보를 정의한 User 객체를 생성한다.

    User 객체는 id, username, password, roles와 같은 정보를 가진다.


    SecurityConfig 클래스 생성

    @Configuration
    @EnableWebSecurity   // 스프링 시큐리티 필터가 스프링 필터 체인에 등록됨
    @RequiredArgsConstructor
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable();
            http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)   // 세션을 사용하지 않겠다는 설정
                    .and()
                    .formLogin().disable()   // 별도의 로그인 페이지 사용하지 않음
                    .httpBasic().disable()   // 기존의 http 방식 사용하지 않음
                    .authorizeRequests()
                    .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();
        }
    }

    config 패키지를 만들고 SecurityConfig 클래스를 생성한 후 위 코드를 작성한다.

    SecurityConfig 클래스 내에 configure() 메서드를 오버라이딩 함으로써 시큐리티 필터에 대한 설정을 한다.


    CorsConfig 클래스 생성

    @Configuration
    public class CorsConfig {
    
        @Bean
        public CorsFilter corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            CorsConfiguration config = new CorsConfiguration();
    
            config.setAllowCredentials(true);   // 내 서버가 응답을 할 때 json을 자바스크립트에서 처리가 가능하도록 설정
            config.addAllowedOrigin("*");   // 모든 ip에 응답을 허용
            config.addAllowedHeader("*");   // 모든 header에 응답을 허용
            config.addAllowedMethod("*");   // 모든 post, get, put, delete, patch 요청을 허용
    
            source.registerCorsConfiguration("/api/**", config);
    
            return new CorsFilter(source);
        }
    }

    config 패키지 내에 CorsConfig 클래스를 생성한다.

    CorsConfig 클래스 내에 corsFilter() 메서드를 생성하고 위 코드를 작성한다.

    corsFilter() 메서드는 CORS에 대한 인증이 필요한 모든 요청을 허용하도록 해주는 메서드이다.


    corsFilter 등록

    위에서 생성한 corsFilter가 동작을 하기 위해서는 시큐리티 필터에 등록할 필요가 있다.

    우선 의존성 주입을 통해 CorsFilter 객체를 생성한다.

    생성한 CorsFilter 객체를 addFilter() 메서드를 통해 시큐리티 필터에 등록한다.


     

    GitHub - qlsdud0604/spring-security-jwt

    Contribute to qlsdud0604/spring-security-jwt development by creating an account on GitHub.

    github.com

     

    728x90

    댓글

Designed by Tistory.