Spring
[Spring Security] 스프링 시큐리티 인증 로직
스프링 시큐리티의 큰 구조에 이어서 스프링 시큐리티의 인증 로직과 구조에 대해서 자세히 알아보자. 지난 포스트를 안 본 사람은 아래 링크를 참고하자. https://brightmango.tistory.com/360 [Spring Security] 스프링 시큐리티와 구조, 동작 원리 Spring Security란? 입증, 권한, 그리고 흔한 공격에 대한 방어적 기술을 제공하는 프레임워크이다. 1. 입증이란 특정 리소스에 접근하는 사용자의 신원을 어떻게 증명할 것인지에 대한 부분이다. brightmango.tistory.com SecurityContextHolder 스프링 시큐리티 인증 모델의 핵심은 누가 인증이 되었는지 저장하는 SecurityContextHolder이다. 만약에 이 holder가 값을 가..
[Spring Security] 스프링 시큐리티와 구조, 동작 원리
Spring Security란? 입증, 권한, 그리고 흔한 공격에 대한 방어적 기술을 제공하는 프레임워크이다. 1. 입증이란 특정 리소스에 접근하는 사용자의 신원을 어떻게 증명할 것인지에 대한 부분이다. 가장 흔한 입증 방식은 유저에게 이메일과 패스워드를 입력하게 하는 방식이다. 2. 이런 입증과정을 통해 입증이 되면, 사용자는 권한을 행사할 수 있게 된다. (특정 리소스에 접근할 수 있음) Spring Security와 Servlet Applications 스프링 시큐리티는 Servlet의 Filter를 사용함으로써 Servlet 컨테이너를 지원한다. 따라서 Servlet을 사용하는 모든 어플리케이션에서 스프링 시큐리티를 사용할 수 있다. Architecture Servlet을 기반으로 한 어플리케이션..
[Spring] BindingResult를 이용한 검증
[도입] 컨트롤러의 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 이 때 검증은 클라이언트와 서버단에서 모두 이루어 지는게 좋다. 그 이유는 다음과 같다. 클라이언트 검증은 조작할 수 있으므로 보완에 취약하다. -> 데이터를 조작해서 서버로 보낼 수 있다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 따라서 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수적이다. Spring에서는 서버단에서 검증을 할 때 에러를 확인하고 이를 view로 쉽게 전달하기 위해서 BindingResult객체를 제공한다. [BindingResult] 보통 errors 메세지를 담고 활용하기 위해 HashMap을 이용하는데, 스프링은 이를 더 쉽게 처리하기 위해 BindingResult객체를 제..
[Spring] 요청 파라미터
HttpServeltRequest의 request.getParameter()를 사용하면 두 가지 요청 파라미터를 조회할 수 있다. GET 쿼리 파라미터, POST HTML Form 전송 방식이든 둘다 형식이 같으므로 구분없이 조회할 수 있다. RequestParam @ResponseBody @RequestMapping("/request-param") public String requestParam( @RequestParam("username") String memberName, @RequestParam("age") int memberAge return "ok"; } 1. RequestParam의 이름와 변수명이 같으면 생략할 수 있다. @ResponseBody @RequestMapping("/reques..
[Spring] 쿼리 파라미터 매핑
요청을 매핑하는 방법으로 RequestMapping과 PathVariable이 있다. RequestMapping 1. "/hello-basic" URL이 호출되면 이 메서드가 실행되도록 매핑한다. @RequestMapping("hello-basic") public String helloBasic() {} 2. method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다. @RequestMapping("/hello-basic", method=RequestMethod.GET) public String helloBasic(); 3. HTTP 메서드를 축약한 어노테이션을 사용하는 것이 더 직관적이다. @GetMapping("/hello-basic") public String hel..