강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

이경도님의 프로필 이미지
이경도

작성한 질문수

스프링부트 시큐리티 & JWT 강의

SpringSecurity JWT 로그인 URL 2개 설정하는 방법

작성

·

366

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와 관련된 로직은 스프링 시큐리티의 기본 구조를 이해하고 적용하는 방식으로 진행해야 합니다.

이경도님의 프로필 이미지
이경도

작성한 질문수

질문하기