2025/02/07: 3개의 글

[SpringBoot] 게시글 등록 주요 애노테이션

Posted by nkjok
2025. 2. 7. 12:39 낙서장[1]/2. SpringBoot
반응형

@RequestBody

기능: 클라이언트에서 전송한 JSON 데이터를 DTO (Data Transfer Object)로 변환하여 컨트롤러 메서드의 매개변수로 전달합니다. 사용 예:

java
@PostMapping("/api/v1/posts")
public void createPost(@RequestBody PostDto postDto) {
    // JSON 데이터가 postDto로 변환되어 전달됨
}

@PathVariable

기능: URL 경로의 일부인 값을 메서드의 매개변수로 전달합니다. 사용 예:

java
@GetMapping("/api/v1/posts/{id}")
public Post getPost(@PathVariable Long id) {
    // URL의 {id} 값이 매개변수 id로 전달됨
}

@RequestParam

기능: 쿼리스트링의 값을 메서드의 매개변수로 전달합니다. 사용 예:

java
@GetMapping("/api/v1/posts")
public List<Post> getPosts(@RequestParam(required = false) String category) {
    // 쿼리스트링의 category 값이 매개변수로 전달됨
}

맞습니다, @RequestParam은 쿼리스트링의 값을 가져올 때 사용됩니다.

@Required

기능: 특정 필드나 메서드 매개변수가 필수임을 명시합니다. Spring에서는 @Autowired와 같이 의존성 주입에 사용될 수 있습니다. 사용 예:

java
@Required
private PostRepository postRepository;

@RequestHeader

기능: HTTP 요청 헤더의 값을 메서드의 매개변수로 전달합니다. 사용 예:

java
@GetMapping("/api/v1/posts")
public List<Post> getPosts(@RequestHeader("Authorization") String token) {
    // 요청 헤더의 Authorization 값을 매개변수로 전달함
}

 

반응형

[SpringBoot] 인증 JWT 개념

Posted by nkjok
2025. 2. 7. 10:08 낙서장[1]/2. SpringBoot
반응형

웹 개발 및 인증 절차와 관련된 다양한 기술과 개념이 손글씨로 적혀 있습니다. 주요 내용은 다음과 같습니다:

  • React: 사용자 인터페이스를 구성하는 프론트엔드 라이브러리입니다.
  • Nginx: 고성능 웹 서버 및 리버스 프록시 서버로 사용됩니다.
  • 4요 웹서버: 네 개의 주요 웹 서버를 의미하는 것 같습니다.
  • Http 요청하고/Http 응답하기: HTTP 요청과 응답을 처리하는 과정입니다.
  • Http 요청 body: 요청 본문에 대한 내용입니다.
  • "Authorization...": 인증 헤더를 사용한 요청입니다.
  • JWT 토큰: JSON Web Token으로, 인증 및 권한 부여에 사용됩니다.
    • typ JWT: JWT 타입을 지정하는 클레임입니다.
    • claim: JWT에 포함된 정보입니다.
    • Signature: JWT의 무결성을 검증하는 서명입니다.
  • App Server: 애플리케이션 서버를 의미합니다.
  • Tomcat: Java 서블릿 및 JSP를 실행하는 애플리케이션 서버입니다.
  • WAS: Web Application Server, 즉 웹 애플리케이션 서버를 의미합니다.

JWT 동작 방식

  1. JWT 생성: 사용자가 로그인하면 서버는 사용자 정보를 기반으로 JWT를 생성합니다. JWT는 헤더(header), 페이로드(payload), 서명(signature)로 구성됩니다.
    • 헤더: 토큰 타입과 알고리즘 정보를 포함합니다.
    • 페이로드: 사용자 정보(클레임)를 포함합니다.
    • 서명: 비밀키를 사용하여 JWT의 무결성을 검증합니다.
  2. JWT 전송: 생성된 JWT는 클라이언트(브라우저)에 전송되고, 클라이언트는 이를 저장(예: 로컬 스토리지)합니다.
  3. JWT 사용: 클라이언트는 이후의 요청에 JWT를 포함하여 서버에 보냅니다. 주로 Authorization 헤더에 Bearer 토큰 형식으로 전송됩니다.
  4. JWT 검증: 서버는 요청을 받을 때마다 JWT의 서명을 검증하여 토큰의 유효성을 확인합니다. 유효한 경우, 페이로드에 포함된 사용자 정보를 통해 권한을 부여하거나 거부합니다.

예제 시나리오

  1. 사용자가 로그인합니다.
  2. 서버가 JWT를 생성하여 클라이언트에 전송합니다.
  3. 클라이언트가 JWT를 저장합니다.
  4. 이후의 모든 요청에 클라이언트가 JWT를 포함하여 서버에 보냅니다.
  5. 서버가 JWT를 검증하고 요청을 처리합니다.
반응형

[SpringBoot] 인증과 권한 관리 SecurityContextHolder

Posted by nkjok
2025. 2. 7. 09:45 낙서장[1]/2. SpringBoot
반응형

SecurityContextHolderSpring Security 프레임워크에서 사용자 인증과 권한 관리를 위해 중요한 역할을 합니다. 이 포스팅에서는 SecurityContextHolder의 사용목적, 기능, 그리고 사용방법을 설명하겠습니다.

1. 사용목적

SecurityContextHolder는 현재 요청의 컨텍스트에서 인증 정보를 쉽게 가져올 수 있도록 해줍니다. 이를 통해 애플리케이션에서 사용자의 ID나 권한 정보를 확인할 수 있습니다1.

2. 기능

  • 현재 사용자 인증 정보 관리: 현재 요청의 컨텍스트에서 인증 정보를 쉽게 가져올 수 있습니다.
  • 요청 스레드 기반의 보안 처리: 요청 스레드의 메모리에 인증 정보를 저장하여 무상태 환경에서도 사용할 수 있습니다.
  • 스프링과의 통합: 다양한 보안 작업을 수행하며, 인증 및 권한 관리를 일관되게 처리할 수 있습니다.

3. 사용방법

SecurityContextHolder는 기본적으로 ThreadLocal을 사용하여 현재 스레드의 메모리에 인증 정보를 저장합니다. 이를 통해 각 요청은 독립적인 인증 정보를 가질 수 있습니다1.

예제 코드

java
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.dto.UserDTO;

@RestController
public class UserController {
    @GetMapping("/api/current-user")
    public UserDTO getCurrentUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.getPrincipal() instanceof UserDTO) {
            return (UserDTO) authentication.getPrincipal();
        } else {
            throw new RuntimeException("인증된 사용자가 없습니다.");
        }
    }
}

이 코드는 컨트롤러에서 현재 인증된 사용자의 정보를 가져오는 방법을 보여줍니다. SecurityContextHolder.getContext().getAuthentication()을 통해 인증 정보를 가져와서 사용자 정보를 반환합니다.

반응형