SpringSecurity JWT 로그인 URL 2개 설정하는 방법
487
작성한 질문수 1
안녕하세요
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와 관련된 로직은 스프링 시큐리티의 기본 구조를 이해하고 적용하는 방식으로 진행해야 합니다.
JWT를 구현한 다음 이 API를 호출해서 사용하는 것은 프론트엔드 쪽에서 하는 역할인가요?
0
96
1
Jwt쓰면 스프링시큐리티는 필수적으로 사용해야하나요?
0
401
1
13:23 system.out 출력문이 다르게 나옵니다.
0
130
1
수료증 문의
0
226
2
9분대에 질문이 있습니다 !
0
114
1
password 비교를 하지 않았는데 어떻게 인증이 통과된 건가요?
0
321
1
이전 강의 참고하라는 말씀
0
253
1
강의 실습하다가 막히는 분들 참고(2024년8월 기준)
2
1116
2
구글 소셜 로그인 302
0
200
1
오류 문의 _ org.springframework.orm.jpa.JpaSystemException: could not deserialize
1
584
1
[자바] 시큐리티 Config 참고
13
953
1
이론강의
0
280
1
2024.06기준) 최근 SecurityConfig 설정 문의
0
921
3
구글 로그인시 authentication이 null 값이라고 에러가 발생합니다.
0
678
2
특정 url필터 거는 방법 이슈
0
422
1
강사님께서 말씀하시는 시큐리티세션이 SecurityContext인가요?
0
277
1
25강 마지막 테스트에서 오류
1
1044
2
jwt를 저장하는 위치에 궁금한 점이 있습니다.
0
298
1
mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데
0
697
1
세션 인증방식이 REST 원칙에 위배되는 건가요?
0
340
1
jwt와 실제데이터의 관계
1
243
1
jwt 와 세션ID의 관계
1
313
1
SecurityConfig에서 세션 설정, 인가 설정
0
420
1
섹션2 9강까지 듣고 질문이 있습니다. 스프링부트 버전을 다운그레이드해도 될까요?
0
396
1





