스프링 부트 - 스프링 시큐리티 JWT로 DB와 연동해서 인증하기
·
Spring
JWT 로그인 절차로그인 아이디/ 비밀번호 전송을 해줌DB에서 아이디/ 비밀번호를 비교DB에서 통과시 JWT발행(생성)JWT를 클라이언트로 전달시켜줘야됨클라이언트의 쿠키 또는 세션/로컬 스토리지에 저장을 시켜줘야됨 ======> 요청을 할 때마다 JWT를 전달시켜줘야됨 웹 요청과 흐름[클라이언트 요청] ↓[서블릿 컨테이너 (Tomcat)] ↓[Filter (서블릿 필터)] ← 서블릿 레벨에서 가장 먼저 실행 ↓[스프링 필터 (FilterRegistrationBean 등으로 등록한 커스텀 필터)] ↓[Spring Security Filter Chain] ← 보안 필터들이 줄줄이 실행됨 ↓[DispatcherServlet] ..
스프링부트 - Spring Security JWT인증하기
·
Spring
JWT는 이전 포스트에서 다뤘기 때문에 간단하게 소개만 하겠다.사용자 인증 정보를 JSON형태로 담아 서명한 토큰 세션을 사용하여 로그인 할 때로그인 정보가 서버(세션)에 저장되어 있다.JWT로그인을 사용하여 인증할 때로그인 정보가 클라이언트(브라우저)에 저장되어있다.그래서 서버 입장에서 요청을 보내는 사람이 누구인지 알 수 없다.클라이언트가 스스로 누구인지 증명을 해야하는데 이 JWT를 이용해서 증명한다. 보통 4가지의 파일을 가지고 가야된다.JwtUtil.java ( 토큰 생성 및 검증 도구 클래스)JwtAuthFilter.java (요청마다 토큰을 꺼내서 검증하는 필터)JwtLoginController.java (로그인 시 토큰 발급하는 컨트롤러)SecurityConfig.java (필터 등록 및 ..
스프링부트 - CORS / CSRF
·
Spring
CORS(Cross-Origin Resource Sharing)란?교차 출처간 리소스를 공유하는 것이다.다른 출처 간에 웹 페이지의 자원을 안전하게 공유할 수 있도록 하는 기술이다.Origin은 URL브라우저에 쓰여있는 주소이다.즉, 프론트와 백의 도메인 또는 포트가 다를 때, 브라우저가 요청을 막는 보안 기능이라고 보면 된다.SOP(Same-Origin Policy )란?웹 브라우저는 보안상의 이유로, 한 출처에서 로드된 문서나 스크립트가 다른 출처의 리소스와 상호작용하는 것을제한한다. 예로, example.com에서 로드된 웹 페이지의 JS는 기본적으로 api.otherserver.com의 데이터를 AJAX요청으로 가져올 수 없기때문이다. SOP의 존재이유?SOP는 악의적인 웹 사이트가 사용자의 동의..
스프링부트 - 타임리프(Thymeleaf)
·
Spring
오늘은 스프링부트의 뷰 템플릿 타임리프에 대해서 알아보겠다. 뷰 템플릿?만약 우리가 로그인 시 페이지에 000님 반갑습니다! 라는 문구가 뜨게 하는데 이것은 html파일을 하나의 사용자마다 따로따로 다 만들까?그렇지 않다. 그럼 왜 웹 서비스를 여나그래서 우리는 view템플릿을 사용해서 하나의 페이지에 변수를 동적으로 할당하여 페이지에 나타낸다.타임리프는 view템플릿엔진 중 하나라고 보면 된다.타임리프는 서버 사이드 렌더링이라고 한다. 웹 페이지를 사용자에게 보여주는 방식은 크게 서버 사이드 랜더링(SSR) 클라이언트 사이드 렌더링(CSR)두개가 있다. 서버 사이드 렌더링?사용자가 웹 페이지를 요청했을 때, 서버에서 해당 페이지의 모든 내용을 렌더링(HTML 문서 형태로 완전히 만들어서)클라이언트(웹..
스프링부트 - 스프링 시큐리티
·
Spring
스프링 시큐리티란?웹 애플리케이션에 인증과 권한 기능을 쉽게 적용할 수 있도록 도와주는 프레임워크이다.로그인, 로그아웃, 비밀번호 암호화, 권한별 페이지 제한, 자동 로그인, CSRF공격 방어 등에 유용하게 사용된다.@Configuration@SecurityFilterChain@UserDetailService등을 활용해서 설정하고 구현된다. 인증(Authentication) 과 인가(Authorization)보통 인증 절차를 거친 후 인가 절차를 진행한다.인증: 해당 사용자가 본인이 맞는지 확인하는 절차인가: 인증된 사용자가 요청된 자원에 접근가능한가를 결정하는 절차일단 스프링에서 스프링 시큐리티를 사용하려면 Maven이나 Gradle에 dependency> groupI..
스프링부트 - JWT(Json Web Token)이란?
·
Spring
JWT(Json Web Token)이란?인증 정보를 Json 형태로 담아 서버-클라이언트 간 안전하게 전달하기 위한 토큰이다.서버에서 발급하고 클라이언트에 저장토큰 자체에 사용자의 모든 정보를 포함하는 것이 가능하다.사용자의 정보가 변경되면 토큰을 재발급 받아야된다.JSON 데이터를 Base64 인코딩을 통해 직렬화JWT 구조.(dot)을 기준으로 헤더 내용 서명이 JWT토큰 하나를 이룬다.만약에 토큰이 완성되면 다음과 같은 형식을 따른다.Base64ASCII 중 제어 문자와 일부 특수 문자를 제외한 64개의 안전한 문자이다.Headertyp: 토큰 타입"JWT"alg(알고리즘): SHA-256, SHA-384, SHA-512 ECDSA(ES), HMAC(HS), ..
스프링부트 - 파일 업로드
·
Spring
파일 업로드에 들어가기 전에 핵심 인터페이스 MultipartHttpServletRequest를 알아야한다. HttpServletRequestHttpServletRequest는 ServletRequest의 자식 인터페이스이며, ServletRequest의 기능을 상속받아 확장하며, 이름과 같이 HTTP요청에 특화된 정보와 기능을 다루는데 사용된다. MultipartHttpServletRequestHttpServletRequest와 MultipartRequest를 상속받은 인터페이스이며,파일업로드와 일반적인 요청 데이터에 특화된 기능을 제공하는 인터페이스이다.public interface MultipartHttpServletRequest extends HttpServletRequest, MultipartR..
스프링부트 - 필터(FilterRegistrationBean)
·
Spring
Filter란?필터(Filter)는 스프링의 기능이 아닌 자바 서블릿진영에서 제공하는 기능이다. HTTp요청과 응답을 가로챈다.자바진영에서 제공하는 필터이므로 스프링의 DispatcherServlet보다 먼저 실행이 된다.AOP보다 Request와 response 객체에 쉽게 접근이 가능하다.FilterRegistrationBean을 통해 특정 URL에만 적용하거나 실행 순서를 제어할 수 있다.위 그림에서 스프링 영역의 Dispatcher Servlet에 들어가기전에 Filter가 실행이 되는 것을 확인 할 수 있다.필터(Filter)는 필터 체인을 통해 연쇄적으로 동작하게도 가능하다. Filter는 어디에 쓰일까?XSS(Cross Site Scripting) 방지(사용자로부터 들어오는 입력 데이터를 검..
[스프링부트] - 인터셉터(interceptor)
·
Spring
인터셉터(Interceptor)란?말 그대로 "어떤것을 가로챈다" 라는 뜻이다. 컨트롤러로 들어오는 요청(메서드(URI))에 접근하는 과정에서 무언가를 제어할 필요가 있을 때 사용이 된다. 정확히는 컨트롤러에 접근하기 전과 후로 나뉜다. Filter와의 차이점?인터셉터보다 필터가 먼저 동작한다.인터셉터는 필터와 다르게 메서드로 제어를 한다.Interceptor클래스 → 메서드로 제어를 하기 위한 클래스 파일InterceptorConfig클래스 → 어떤 URI에 대해서 동작할 것인지 설정을 위한 클래스 파일PostViewLogInterceptor.javapackage com.example.interceptor.interceptor;import jakarta.servlet.http.*;import lomb..
[스프링부트] - Controller Advice
·
Spring
Controller Advice란API동작 중에 예외가 발생했을 때, 예외를 바로 사용자에게 반환하는 것은 불필요하고, 심하면 공격까지 받을 수 있다.그래서 이를 적절히 처리해주는 역할을 하는 것이 바로 Controller Advice읻. @Controller Advice이 어노테이션 붙은 클래스 파일은 애플리케이션 내 모든 컨트롤러에서 발생하는 예외를 처리할 수 있다.즉, 매핑 메서드 실행중 발생한 예외를 가로채는 exceptions interceptor라고 생각하면 된다. Controller Advice 사용이유?예외처리를 한 곳에 묶어서 편하게 관리처리가 제대로 되지 못한 부분에 예외발생 시 브라우저에 모든 예측하지 못한 예외도 한꺼번에 처리 가능컨틀롤러의 역할에 집중할 수 있고, 코드 중복 제거,..