웹 애플리케이션에서 관리되는 영역으로 클라이언트에서 오는 요청과 응답에 대해서 최초, 최종 단계에 위치한다.
요청과 응답에 정보를 변경하거나 부가적인 기능을 추가할 수 있다. ex) Logging, 보안, 인증·인가 관련
Filter 0 => Logging용 필터 Filter 1 => 인증·인가용 필터라고 가정해 보자
Logging용 필터 ▼
public class LoggingFilter implements Filter {
@Override
// Filter를 implements 한 뒤 사용 가능한 doFilter 메서드, FilterChain은 filter를 이동시키기 위해 사용
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{
// HttpServletRequest로 캐스팅한 후 사용
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String url = httpServletRequest.getRequestURI();
chain.doFilter(request, response); // 다음 Filter로 이동
}
}
JWT 활용하기에서 인증·인가용 필터에서 사용하는 메서드를 확인해 보자
JWT 활용하기
인증(Authentication)과 인가(Authorization) 란? 인증(Authentication)과 인가(Authorization) 란?인증 ▼해당 유저가 실제 유저인지 인증하는 개념지문인식, 로그인 등 실제 유저가 맞는지 확인하는 장치인가 ▼
seungg8361.tistory.com
인증·인가용 필터 ▼
public class AuthFilter implements Filter {
private final UserRepository userRepository;
private final JwtUtil jwtUtil;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String url = httpServletRequest.getRequestURI();
// hasText : null 인지 공백인지 확인하는 메서드
if(StringUtils.hasText(url)&&
(url.startsWith("/api/user")||url.startsWith("/css")||url.startsWith("/js"))){
// 회원가입, 로그인 관련 API 는 인증 필요없이 요청 진행
chain.doFilter(request,response); // 다음 Filter로 이동
}else{
String tokenValue = jwtUtil.getTokenFromRequest(httpServletRequest);
if(StringUtils.hasText(tokenValue)){ // 토큰이 존재하면 검증 시작
// JWT 토큰 subString, 순수한 토큰만 뽑아냄
String token = jwtUtil.substringToken(tokenValue);
// 토큰 검증
if(!jwtUtil.validateToken(token)){
throw new IllegalArgumentException("Token Error");
}
// 토큰에서 사용자 정보 가져오기
Claims info = jwtUtil.getUserInfoFromToken(token);
User user = userRepository.findByUsername(info.getSubject()).orElseThrow(()->
new IllegalArgumentException("Not Found User"));
request.setAttribute("user", user);
chain.doFilter(request,response);
}else{
throw new IllegalArgumentException("Not Found Token");
}
}
}
}
이후 Spring Security를 학습하며 내용을 더 추가해 보자🖐️🖐️
'🔥스파르타 TIL (Spring)' 카테고리의 다른 글
JWT 활용하기 (2) - 회원 가입, 로그인 기능 만들기 (0) | 2025.02.13 |
---|---|
Spring Security 란? (0) | 2025.02.10 |
JWT 활용하기 (1) (1) | 2025.02.10 |
인증(Authentication)과 인가(Authorization) 란? (0) | 2025.02.09 |
Bean 이란? (0) | 2025.02.09 |