식별된 클라이언트가 요청된 리소스에 액세스할 권한이 있는지 시스템이 결정하는 프로세스.
GrantedAuthority
Spring Security에서 사용자의 권한을 나타내는 인터페이스이다.
사용자의 역할(Role)이나 권한(Permission)을 표현하는데 사용한다.
class CustomUser (
val userId: Long,
userName: String,
password: String,
authorities: Collection<GrantedAuthority>
) : User(userName, password, authorities)
특정 기능이나 리소스에 대한 접근을 세밀하게 제어할 때 사용한다.
사용자가 수행할 수 있는 특정 작업을 정의한다.
- hasAuthority(String authority): 특정 권한이 있는지 확인
- hasAnyAuthority(String... authorities): 주어진 권한들 중 하나라도 있는지 확인

역할은 사용자에게 부여된 높은 수준의 권한 그룹을 나타낸다.
일반적으로 여러 권한의 집합으로 구성된다.
사용자가 착용하는 배지와 비슷하다고 생각하면 된다. 배지를 통해 작업 그룹을 구분하고 같은 그룹에 동일한 권한을 부여한다.
- hasRole(String role): 특정 역할이 있는지 확인. 역할은 내부적으로 ROLE_ 접두사가 붙어서 권한으로 처리
- hasAnyRole(String... roles): 주어진 역할들 중 하나라도 있는지 확인
@Configuration
@EnableWebSecurity
class SecurityConfig(
private val jwtTokenProvider: JwtTokenProvider,
) {
@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
http
.httpBasic { it.disable() }
.csrf { it.disable() }
.sessionManagement { it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) } // 세션을 사용하지 않음
.authorizeHttpRequests {
it.requestMatchers(
"/api/member/signup",
"/api/member/login",
).anonymous() // 해당 url에 접속하는 사용자는 인증되지 않은 사용자.
.requestMatchers("/api/member/**").hasRole("MEMBER") // 멤버 권한이 있어야 들어갈 수 있음
.requestMatchers("/api/keyword/**").hasRole("MEMBER")
.requestMatchers("/ws-stomp/**").permitAll()
.requestMatchers("/api/auth/refresh").permitAll()
.anyRequest().permitAll() // 나머지 url은 접근 가능
}
.addFilterBefore( // 필터 순서 설정. 앞에 필터가 실행되야 뒤에 있는 필터가 실행된다
JwtAuthenticationFilter(jwtTokenProvider),
UsernamePasswordAuthenticationFilter::class.java,
)
return http.build()
}
@Bean
fun passwordEncoder(): PasswordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder()
}
.anonymous(): 익명의 사용자만 접근 가능
.hasRole("MEMBER"): MEMBER 역할만 접근 가능
.permitAll(): 모든 사용자, 인증 권한에 관계없이 접근 가능