작성
·
188
0
안녕하세요
SpringSecurity를 이용해서 유저 , 관리자 로그인의 대한 로직을 따로 두고싶습니다.
SecurityFilter내에서
유저 로그인 URL과 로직을
관리자 로그인 URL과 로직을
어떻게 나눌 수 있을까욤 ㅠㅠ?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
스프링 시큐리티(Spring Security)를 사용하여 다른 권한을 가진 유저와 관리자 로그인의 로직을 나누려면, 별도의 SecurityFilterChain
을 정의하여 구분할 수 있습니다. 각각의 로그인 URL과 로직에 맞게 HttpSecurity
객체를 설정하여 처리합니다. 예를 들어, configure(HttpSecurity http)
메소드 내에서 유저와 관리자에 대한 인증 절차를 분리하여 설정할 수 있습니다. 여기에 JWT 토큰 기반 인증을 추가하기 위해서는 JWT 토큰을 검증하고 인증하는 로직을 커스텀 필터로 추가하고, 해당 필터를 HttpSecurity
의 필터 체인에 등록해야 합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain userFilterChain(HttpSecurity http) throws Exception {
http
.antMatcher("/user/**") // 유저 로그인 URL을 "/user/**"로 설정
.authorizeRequests()
.anyRequest().hasRole("USER")
.and()
.addFilterBefore(new JwtTokenFilter(), UsernamePasswordAuthenticationFilter.class)
// JWT 토큰 필터 추가
// 여기서 JwtTokenFilter는 JWT 토큰을 검증하는 커스텀 필터
.formLogin()
.loginProcessingUrl("/user/login"); // 유저 로그인 처리 URL
return http.build();
}
@Bean
public SecurityFilterChain adminFilterChain(HttpSecurity http) throws Exception {
http
.antMatcher("/admin/**") // 관리자 로그인 URL을 "/admin/**"로 설정
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.addFilterBefore(new JwtTokenFilter(), UsernamePasswordAuthenticationFilter.class)
// 여기서 JwtTokenFilter는 JWT 토큰을 검증하는 커스텀 필터
.formLogin()
.loginProcessingUrl("/admin/login"); // 관리자 로그인 처리 URL
return http.build();
}
}
위 예시에서는 두 개의 SecurityFilterChain
을 정의하여 각각 유저와 관리자의 로그인 로직을 구분하였습니다. antMatcher
메소드를 사용하여 각각의 로그인 URL 및 로직을 나누고 있으며, JwtTokenFilter
라는 커스텀 필터를 이용하여 JWT 토큰 검증을 수행합니다. JwtTokenFilter
의 구현은 여기서 별도로 제공되지 않았지만, 일반적으로 OncePerRequestFilter
를 상속받아 구현합니다.
시큐리티 설정을 커스터마이징할 때는 스프링 시큐리티의 기본 웹 보안 설정을 덮어쓰기 때문에 기존의 설정이 필요없을 경우 명시적으로 비활성화해야 할 수도 있습니다. 자세한 정보는 스프링 공식 문서를 참조하세요.
단, 제공된 정보에는 JWT를 직접적으로 언급하는 부분이 없으므로, JWT와 관련된 로직은 스프링 시큐리티의 기본 구조를 이해하고 적용하는 방식으로 진행해야 합니다.