Skip to content

Commit

Permalink
feat: Add SecurityConfig (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
youjin09222 committed Nov 10, 2023
1 parent f6bea6c commit e5fe09f
Showing 1 changed file with 41 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.gdsc_teamb.servertoyproject.jwt;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

@Configuration
@EnableWebSecurity // 웹 보안 활성화 (CSRF 공격 방지)
@EnableMethodSecurity // 메서드 레벨의 보안 설정 활성화
public class SecurityConfig {
private JwtTokenProvider jwtTokenProvider;

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.httpBasic(AbstractHttpConfigurer::disable) // rest api 이므로 basic auth 및 csrf 보안을 사용 X
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(config -> config.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 세션 사용 X
.authorizeRequests()
.requestMatchers(new AntPathRequestMatcher("/members/login")).permitAll() // 모든 요청 허가
.requestMatchers(new AntPathRequestMatcher("/members/test")).hasRole("USER") // USER 권한 확인
.anyRequest().authenticated() // 이 밖에 모든 요청에 대해 인증 필요
.and()
.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class);
return http.build();
}

@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}

0 comments on commit e5fe09f

Please sign in to comment.