Spring Web MVC - 파일 업로드와 MultipartFile
·
Spring
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet/multipart.html Multipart Resolver :: Spring FrameworkServlet multipart parsing needs to be enabled through Servlet container configuration. To do so: In Java, set a MultipartConfigElement on the Servlet registration. In web.xml, add a " " section to the servlet declaration. The following example shows how todocs.spring.io 1..
HttpServletRequest 객체에서 Parameter와 Attribute의 차이
·
Spring
Spring MVC 또는 Servlet 기반 웹 애플리케이션에서 HttpServletRequest 객체는 Parameter와 Attribute를 사용하여 데이터를 처리합니다. 두 개념은 역할과 사용 방법에서 차이가 있으므로 정확히 이해하는 것이 중요합니다.1. 개념1.1 Parameter클라이언트(브라우저)에서 전송된 요청 데이터를 의미.주로 폼 데이터(POST 요청) 또는 쿼리 스트링(GET 요청)으로 전달된 값.request.getParameter() 메서드를 사용하여 읽음.읽기 전용: 값을 변경하거나 추가할 수 없음.1.2 Attribute서버 내부에서 데이터를 공유하기 위해 저장하는 데이터.컨트롤러, 필터, 인터셉터 등에서 설정하여 이후 요청 흐름에서 사용.request.setAttribute()..
Spring Web MVC - WebMvcConfigurer
·
Spring
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-config.html MVC Config :: Spring FrameworkThe MVC Java configuration and the MVC XML namespace provide default configuration suitable for most applications and a configuration API to customize it.docs.spring.io https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-config/customize.html#page-title MVC Config API :: Spring..
Spring Web MVC - HandlerInterceptor
·
Spring
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet/handlermapping-interceptor.html Interception :: Spring FrameworkAll HandlerMapping implementations support handler interception which is useful when you want to apply functionality across requests. A HandlerInterceptor can implement the following:docs.spring.io https://docs.spring.io/spring-framework/reference/web/webmvc/mv..
리다이렉트(Redirect)와 포워드(Forward)
·
Spring
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet/viewresolver.html#mvc-redirecting-redirect-prefix View Resolution :: Spring FrameworkYou can also use a special forward: prefix for view names that are ultimately resolved by UrlBasedViewResolver and subclasses. This creates an InternalResourceView, which does a RequestDispatcher.forward(). Therefore, this prefix is not use..
스프링 JWT 심화 9 : 로그아웃
·
Spring/Spring Security - JWT
로그아웃 기능로그아웃 기능을 통해 추가적인 JWT 탈취 시간을 줄일 수 있다.로그아웃 버튼 클릭 시프론트엔드 측 : 로컬 스토리지에 존재하는 Access 토큰 삭제 및 서버 측 로그아웃 경로로 Refresh 토큰 전송백엔드 측 : 로그아웃 로직을 추가하여 Refresh 토큰을 받아 쿠키 초기화 후 Refresh DB에서 해당 Refresh 토큰 삭제 (모든 계정에서 로그아웃 구현 시 username 기반으로 모든 Refresh 토큰 삭제)백엔드에서 로그아웃 수행 작업DB에 저장하고 있는 Refresh 토큰 삭제Refresh 토큰 쿠키 null로 변경스프링 시큐리티에서의 로그아웃 구현의 위치일반적으로 스프링 시큐리티 의존성을 프로젝트에 추가했을 경우 기본 로그아웃 기능이 활성화 된다. 해당 로그아웃을 수행..
스프링 JWT 심화 8 : Refresh 토큰 서버 측 저장
·
Spring/Spring Security - JWT
서버 측 주도권단순하게 JWT를 발급하여 클라이언트 측으로 전송하면 인증 / 인가 에 대한 주도권 자체가 클라이언트 측에 맡겨진다. JWT를 탈취하여 서버 측으로 접근할 경우 JWT가 만료되기 까지 서버 측에서는 그것을 막을 수 없으며, 프론트 측에서 토큰을 삭제하는 로그아웃을 구현해도 이미 복제가 되었다면 피해를 입을 수 있다. 이런 문제를 해결하기 위해 생명주기가 긴 Refresh 토큰은 발급 시 서버 측 저장소에 기억한 후 기억되어 있는 Refresh 토큰만 사용할 수 있도록 서버 측에서 주도권을 가질 수 있다.구현 방법발급 시Refresh 토큰을 서버 측 저장소에 저장갱신 시 (Refresh Rotate)기존 Refresh 토큰을 삭제하고 새로 발급한 Refresh 토큰을 저장토큰 저장소 구현토큰..
스프링 JWT 심화 7 : Refresh Rotate
·
Spring/Spring Security - JWT
Refresh Rotate란Reissue 엔드포인트에서 Refresh 토큰을 받아 Access 토큰 갱신 시 Refresh 토큰도 함께 갱신하는 방법이다. 장점Refresh 토큰 교체로 보안성 강화로그인 지속시간 길어짐추가 구현 작업발급했던 Refresh 토큰을 모두 기억한 뒤, Rotate 이전의 Refresh 토큰은 사용하지 못하도록 해야 함.Reissue기존 ReissueController 코드에서 일부 로직만 추가하면 된다. PostMapping("/reissue") 경로 메소드@PostMapping("/reissue")public ResponseEntity reissue(HttpServletRequest request, HttpServletResponse response) { //get r..
스프링 JWT 심화 6 : Refresh로 Access 토큰 재발급
·
Spring/Spring Security - JWT
요청 로직 서버 측 JWTFilter에서 Access 토큰의 만료로 인한 특정한 상태 코드가 응답되면 프론트 측 Axios Interceptor와 같은 예외 핸들러에서 Access 토큰 재발급을 위한 Refresh을 서버 측으로 전송한다.reissue@Controller@ResponseBodypublic class ReissueController { private final JWTUtil jwtUtil; public ReissueController(JWTUtil jwtUtil) { this.jwtUtil = jwtUtil; } @PostMapping("/reissue") public ResponseEntity reissue(HttpServletRequest requ..
스프링 JWT 심화 5 : Access 토큰 필터 : JWTFilter
·
Spring/Spring Security - JWT
프론트에서 데이터 요청프론트의 API Client로 서버측에 요청을 보낸 후 데이터를 획득한다. 이때 권한이 필요한 경우 Access 토큰을 요청 헤더에 첨부하는데 Access 토큰 검증은 서버 측 JWTFilter에 의해 진행된다.JWTFilter// 헤더에서 access키에 담긴 토큰을 꺼냄String accessToken = request.getHeader("access");// 토큰이 없다면 다음 필터로 넘김if (accessToken == null) { filterChain.doFilter(request, response); return;}// 토큰 만료 여부 확인, 만료시 다음 필터로 넘기지 않음try { jwtUtil.isExpired(accessToken);} catch (..