"@RequestMapping" 메소드는 "private" 일 수 없습니다.

 

@Controller 어노테이션이 달린 클래스의(메타 어노테이션을 통해 직접 또는 간접적으로 - Spring Boot의 @RestController와 같이) @RequestMapping 주석 부분이 있는 메서드는 일치하는 웹 요청을 처리하기 위해 호출됩니다. 스프링은 가시성을 확인하지 않고 리플렉션을 통해 이러한 메서드를 호출하기 때문에 메서드가 private 인 경우에도 메소드는 호출됩니다.

따라서, 민감한 메소드를 private 로 선언하는 것이 그러한 코드가 호출되는 것을 제어하는 좋은 방법처럼 보일 수 있습니다. 하지만 불행하게도, 모든 스프링 프레임워크가 이러한 방식으로 가시성을 무시하는 것은 아닙니다. 예를 들어, 민감하고, 개인적인 웹 접근을 제어하기 위해 @RequestMapping 어노테이션이 달린 메소드에 @Secured 어노테이션을 붙인 경우에도 여전히 유저의 인증 여부에 상관 없이 접근이 가능합니다. 이것은 AOP 프록시가 private 메소드에는 적용되지 않기 때문입니다.

이 규칙은 @RequestMapping 어노테이션 이외에도 스프링 프레임워크 4.3 부터 도입된 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping 어노테이션 또한 고려합니다.

규칙을 어긴 코드

@RequestMapping("/greet", method = GET)
private String greet(String greetee) {  // 규칙을 어긴 코드

규칙을 준수한 해결책

@RequestMapping("/greet", method = GET)
public String greet(String greetee) {

참고


If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project