▶ UserController 클래스
더보기
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class UserController {
private final UserService userService;
private HandlerMethodArgumentResolver xxx;
private RequestParamMethodArgumentResolver uyyy;
private DispatcherServlet dps;
...
}
▷ UserController 클래스 분석
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
- @RestController: 이 어노테이션은 Spring MVC에서 이 클래스를 RESTful 컨트롤러로 인식하도록 한다. 이 클래스에 정의된 모든 메소드는 JSON이나 XML 형식으로 응답을 반환하게 된다.
- @RequestMapping("/api"): 이 클래스에 정의된 모든 메소드가 기본적으로 /api 경로를 포함하도록 한다. 예를 들어, 이 클래스 내의 메소드에서 /login으로 매핑하면 실제 경로는 /api/login이 된다.
- @RequiredArgsConstructor: Lombok의 어노테이션으로, final로 선언된 필드를 포함하는 생성자를 자동으로 생성한다. 이를 통해 의존성 주입을 생성자 주입 방식으로 사용할 수 있게 한다.
private final UserService userService;
private HandlerMethodArgumentResolver xxx;
private RequestParamMethodArgumentResolver uyyy;
private DispatcherServlet dps;
- private final UserService userService: UserService 타입의 userService 필드를 선언한다. final로 선언되었기 때문에 한 번 초기화되면 변경할 수 없다.
- HandlerMethodArgumentResolver xxx, RequestParamMethodArgumentResolver uyyy: 메소드 파라미터를 처리하는 컴포넌트다.
- DispatcherServlet dps: DispatcherServlet은 Spring의 중앙 서블릿으로, 모든 HTTP 요청을 처리하고 컨트롤러에 연결한다.
▶ signup 메서드
@PostMapping("/signup")
public ResponseEntity<User> signup(@Valid @RequestBody UserDto userDto) {
return ResponseEntity.ok(userService.signup(userDto));
}
- @PostMapping("/signup"): HTTP POST 요청을 /signup 경로로 매핑하여 이 메소드가 호출되도록 한다.
- public ResponseEntity<User> signup(...): 메소드 선언부로, 사용자 등록 요청을 처리하고 결과를 User 객체로 응답한다.
- @Valid @RequestBody UserDto userDto: 요청 본문을 UserDto 객체로 변환하고, 유효성 검사를 수행한다. UserDto는 사용자 등록에 필요한 nickname, username, password 등의 정보를 포함한다.
- userService.signup(userDto): UserService의 signup 메소드를 호출하여 새로운 사용자를 생성한다.
- return ResponseEntity.ok(...): 생성된 사용자 정보를 포함하는 User 객체를 응답 본문에 담아 반환한다. 상태 코드는 200 OK로 설정된다.
▶ getMyUserInfo 메소드
@GetMapping("/user")
@PreAuthorize("hasAnyRole('USER','ADMIN')")
public ResponseEntity<User> getMyUserInfo() {
return ResponseEntity.ok(userService.getMyUserWithAuthorities().get());
}
- @GetMapping("/user"): HTTP GET 요청을 /user 경로로 매핑하여 이 메소드가 호출되도록 한다.
- @PreAuthorize("hasAnyRole('USER','ADMIN')"): 이 메소드에 접근할 수 있는 권한을 USER 또는 ADMIN 역할로 제한합니다. 이 메소드는 인증된 사용자만 접근할 수 있다.
- return ResponseEntity.ok(...): 현재 사용자의 정보를 담은 User 객체를 JSON으로 응답한다. 상태 코드는 200 OK로 설정된다.
- userService.getMyUserWithAuthorities(): 현재 인증된 사용자의 정보를 가져오는 메소드다. 반환값은 Optional<User> 형식이며, .get()을 통해 실제 User 객체를 추출한다.
▶ getUserInfo 메소드
@GetMapping("/user/{username}")
@PreAuthorize("hasAnyRole('ADMIN')")
public ResponseEntity<User> getUserInfo(@PathVariable String username) {
return ResponseEntity.ok(userService.getUserWithAuthorities(username).get());
}
- @GetMapping("/user/{username}"): HTTP GET 요청을 /user/{username} 경로로 매핑하여 이 메소드가 호출되도록 한다. {username}은 URL 경로 변수로, 특정 사용자의 정보를 가져올 때 사용된다.
- @PreAuthorize("hasAnyRole('ADMIN')"): 이 메소드는 ADMIN 권한을 가진 사용자만 접근할 수 있다.
- @PathVariable String username: URL 경로에서 {username} 값을 username 변수로 받아온다.
- return ResponseEntity.ok(...): 요청된 사용자의 정보를 담은 User 객체를 JSON으로 응답한다. 상태 코드는 200 OK로 설정된다.
- userService.getUserWithAuthorities(username): 주어진 username에 해당하는 사용자 정보를 가져온다. 반환값은 Optional<User>이며, .get()으로 User 객체를 추출한다.
'개인 코드 분석' 카테고리의 다른 글
스프링 시큐리티 Jwt: jwt.JwtFilter (0) | 2024.11.05 |
---|---|
스프링 시큐리티 Jwt: jwt.JwtAuthenticationEntryPoint (0) | 2024.11.05 |
스프링 시큐리티 Jwt: jwt.JwtAccessDeniedHandler (0) | 2024.11.05 |
스프링 시큐리티 Jwt: handler.GlobalExceptionHandler (0) | 2024.11.05 |
스프링 시큐리티 Jwt: controller.AuthController (0) | 2024.11.05 |