celina의 이것저것

Spring Security와 세션 그리고 필터 본문

Project/이커머스 프로젝트

Spring Security와 세션 그리고 필터

celinayk 2026. 1. 18. 17:22
반응형
  • Spring Security: 보안 프레임워크 (인증/인가 전체를 담당)

시큐리티 안에 JWT라는것이 들어간다. 보안과 관련된것들 중 하나라고 생각하면 된다. 

 

 

기존에는 유저가 로그인할 때 비밀번호를 평문 8글자로만 체크하고 있다.

비밀번호 같은 중요한 기밀은 절대 그대로 저장하면 안된다...

그렇기 때문에 보안이 필요하다

// 로그인
  public UserResponse login(UserLoginRequest request) {
    // 이메일로 사용자 조회
    User user = userRepository.findByEmail(request.getEmail())
        .orElseThrow(() -> new UserException(ErrorCode.PASSWORD_UNMATCHED));

    // 비밀번호 확인 (현재는 평문 비교, 나중에 암호화 추가 예정)
    if (!user.getPassword().equals(request.getPassword())) {
      throw new UserException(ErrorCode.PASSWORD_UNMATCHED);
    }

    return UserResponse.from(user);
  }

 

 


Spring Security

1. 유저가 로그인을 시도한다 - http request

2. AuthenticationFilter(필터쪽에 배치)가 유저의로그인정보를 가로채서 UsernamePasswordAuthentication Token(이 토큰이 스프링 세션으로 저장됨)이라는 인증객체(있을수도 있고, 없을수도 있음)를 생성하여, 필터는 이 인증객체가 유효한지를 체크한다. 

3. AuthenticationManager에게 Authentication객체를 전달한다.

 

UsernamePasswordAuthentication Token이게 있는지 없는지에 따라, 로그인, 로그아웃을 구분한다. 

인증토큰이 잇으면 로그인, 

로그아웃의 동작은 인증서를 지우는 행위이다.

 

userdetail서비스에서 검증한다. 

검증되면 유저객체를 리턴하는게 아니라,. 인증토큰을 ㅁ발행하기위한 ? 데이터클래스로 반환? 유저

 

서블릿레벨에서부터 시작된다. 

보안을 필터에서부터 처리하는이유는, 이 레벨에서 처리할 수 있는것들이 있기때문

필터에서 컷못하면 인터셉터까지 까는데, 인터셉터레벨부터는 쓰레드가 올라온다. 그래서 불필요한 스레드가 올라올 수 도 있다.

필터(서블릿제공), 인터셉터(스프링mvc제공)

jwt를 쓰고 싶으면 AuthenticationFilter를 커스텀해야함 무조건!

 

  • 필터 (Servlet Level): 스프링 MVC(DispatcherServlet)에 도달하기 전, 서블릿 컨테이너 레벨에서 동작합니다. 인증되지 않은 사용자를 필터에서 바로 401 Unauthorized로 쳐내면(Cut), 불필요한 컨트롤러 호출이나 스레드 자원 낭비를 막을 수 있습니다.
  • 인터셉터 (Spring MVC Level): 이미 스프링 컨텍스트 안으로 들어온 상태이므로, 인증 실패 시에도 이미 소모된 자원이 더 많습니다. 따라서 보안은 최대한 **'앞단(Filter)'**에서 처리하는 것이 정석입니다.

Comments