Spring and Spring Boot/Class, Annotation, Library

Spring Security Library : HttpServletRequest Interface

마이트너 2025. 3. 16. 22:00

 


스프링 시큐리티 및 스프링 부트에서 HttpServletRequest 객체는 중요한 역할을 하며, 보안 관련 작업에 많이 사용됩니다. 아래는 HttpServletRequest에서 스프링 시큐리티 및 스프링 부트 동작에서 유의미한 동작과 관련된 주요 메소드들입니다.


1. getAuthType()

  • 설명: 이 메소드는 요청에 대해 사용된 인증 방법을 반환합니다. 예를 들어, "BASIC", "FORM", "CLIENT_CERT", "DIGEST" 등이 될 수 있습니다.
  • 스프링 시큐리티에서 사용: 스프링 시큐리티에서 인증 방식(Basic, Form 등)을 확인할 때 사용될 수 있습니다. 인증 방식은 인증을 처리하는 필터에 영향을 미칩니다.
String authType = request.getAuthType();

2. getRemoteUser()

  • 설명: 인증된 사용자의 원격 사용자 이름을 반환합니다.
  • 스프링 시큐리티에서 사용: 인증된 사용자의 이름을 가져오는 데 사용됩니다. 이 값은 SecurityContextHolder에 저장된 Authentication 객체와 연결된 사용자의 정보를 가져올 때 유용합니다.
String remoteUser = request.getRemoteUser();

3. isUserInRole(String role)

  • 설명: 사용자가 특정 역할(role)을 가지고 있는지 확인합니다.
  • 스프링 시큐리티에서 사용: 이 메소드는 권한 부여(Authorization) 과정에서 사용됩니다. 요청이 들어왔을 때 사용자가 특정 역할을 가지고 있는지 확인하여 권한을 부여하는 데 사용됩니다.
boolean hasRole = request.isUserInRole("ADMIN");

4. getUserPrincipal()

  • 설명: 인증된 사용자의 Principal 객체를 반환합니다. Principal 객체는 사용자의 이름이나 기타 인증 정보를 포함합니다.
  • 스프링 시큐리티에서 사용: SecurityContextHolder에 저장된 Authentication 객체에서 사용자 정보(Principal)을 쉽게 추출할 수 있습니다.
Principal principal = request.getUserPrincipal();

5. getSession(boolean create)

  • 설명: 현재 요청과 관련된 세션을 가져옵니다. create가 true일 경우, 세션이 없으면 새로 생성합니다.
  • 스프링 시큐리티에서 사용: 세션을 통해 인증 정보를 유지할 수 있습니다. 세션을 사용하여 인증된 사용자 정보를 저장하고 요청 간 인증 상태를 유지합니다.
HttpSession session = request.getSession(true);  // 세션이 없으면 새로 생성

6. getRequestedSessionId()

  • 설명: 요청에 포함된 세션 ID를 반환합니다.
  • 스프링 시큐리티에서 사용: 이 값은 세션을 확인하거나 세션을 재인증할 때 사용됩니다. 사용자가 새로운 요청을 보낼 때 기존 세션이 유효한지 확인하는 데 유용합니다.
String sessionId = request.getRequestedSessionId();

7. isRequestedSessionIdValid()

  • 설명: 요청에 포함된 세션 ID가 유효한지 확인합니다.
  • 스프링 시큐리티에서 사용: 세션의 유효성 검사에 사용됩니다. 요청이 유효한 세션을 사용하는지 확인할 때 유용합니다. 인증된 사용자의 세션이 유효한지 확인하여, 요청을 처리할 수 있도록 합니다.
boolean validSession = request.isRequestedSessionIdValid();

8. authenticate(HttpServletResponse response)

  • 설명: 클라이언트를 인증하기 위한 메소드입니다. HttpServletResponse 객체를 이용하여 인증을 수행합니다.
  • 스프링 시큐리티에서 사용: 주로 Basic Authentication이나 Digest Authentication과 같은 HTTP 인증 방식을 처리할 때 사용됩니다.
request.authenticate(response);  // 인증 과정 시작

9. login(String username, String password)

  • 설명: 사용자 이름과 비밀번호를 사용하여 로그인합니다.
  • 스프링 시큐리티에서 사용: 이 메소드는 일반적으로 인증을 시작하기 위한 메소드로, HttpServletRequest를 통해 로그인 정보를 처리할 수 있습니다. 스프링 시큐리티에서는 이 메소드를 통해 로그인 절차를 시작할 수 있습니다.
request.login("user", "password");  // 로그인 처리

10. logout()

  • 설명: 사용자가 로그아웃할 때 호출됩니다.
  • 스프링 시큐리티에서 사용: 스프링 시큐리티에서는 로그아웃을 처리할 때 SecurityContextHolder에 저장된 인증 정보를 삭제하고, 세션을 무효화하여 보안 상태를 관리합니다.
request.logout();  // 로그아웃 처리

11. getRequestURI()

  • 설명: 요청된 URI를 반환합니다.
  • 스프링 시큐리티에서 사용: URI를 사용하여 요청을 필터링하거나 특정 경로에 대한 보안을 설정할 때 유용합니다.
String uri = request.getRequestURI();

12. getRequestURL()

  • 설명: 전체 요청 URL을 반환합니다. 이는 URI와 호스트 정보를 포함한 전체 URL을 제공합니다.
  • 스프링 시큐리티에서 사용: 전체 URL을 기반으로 보안 필터나 인증 절차를 설정할 때 유용합니다.
StringBuffer url = request.getRequestURL();

 


실제 코드에서 HttpServletRequest가 보이지는 않는데,
간접적으로 어떻게 활용되고 있는지 알아보자

 

1. @RequestParam과 HttpServletRequest

@RequestParam 어노테이션은 클라이언트의 요청 파라미터를 메서드 인자로 바인딩하는데 사용됩니다. 내부적으로는 HttpServletRequest 객체에서 요청 파라미터를 읽는 방식으로 동작합니다.

예시:

@PostMapping("/auth")
public ResponseEntity<Map<String,Object>> login(@RequestParam String email, @RequestParam String password) {
    // email과 password는 HttpServletRequest 객체에서 자동으로 가져옴
    ...
}
 

 

2. @RequestBody와 HttpServletRequest

@RequestBody 어노테이션은 요청 본문에 포함된 데이터를 객체로 변환합니다. 내부적으로 Spring은 HttpServletRequest를 사용해 요청 본문을 읽어오고 이를 지정된 객체로 변환합니다.

@PostMapping("/signup")
public ResponseEntity<UserResponse> createUser(@Valid @RequestBody UserRequest userRequest) {
    // userRequest는 HttpServletRequest 객체의 요청 본문에서 변환된 데이터
    return ResponseEntity.ok(userService.createUser(userRequest));
}

 

3. @RequestHeader와 HttpServletRequest

@RequestHeader는 요청 헤더를 메서드 인자로 바인딩합니다. 이 또한 HttpServletRequest 객체를 사용하여 헤더 값을 추출하는 방식으로 동작합니다.

예시:

@GetMapping("/users/validate")
public ResponseEntity<UserResponse> validateUser(@RequestHeader("Authorization") String token) {
    // Authorization 헤더는 HttpServletRequest 객체에서 가져옴
    return ResponseEntity.ok(userService.validateUser(token));
}

스프링 시큐리티와 스프링 부트에서 HttpServletRequest의 다양한 메소드들이 인증(Authentication), 권한 부여(Authorization), 세션 관리 등을 처리하는 데 중요한 역할을 합니다. 특히 사용자의 인증 상태를 유지하고 관리하는 데 필요한 정보를 제공하며, 로그인, 로그아웃, 권한 확인 등의 작업을 필터 체인에서 수행할 수 있도록 도와줍니다.


 

728x90