본문 바로가기

FrameWork/Spring15

Spring + JWT build.gradle // jwp 라이브러리 implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' UserDomain User package com.example.jwttutorial.entity; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import javax.pers.. 2021. 8. 31.
JWT 로그인 인증방식(Spring Cloud) JWT란? Json Web Token의 약자 Json 객체를 사용해 가볍고 자가수용적인(self-contained) 방식으로 정보를 안전성 있게 전달해주기 위한 토큰 JWT의 구조 JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io HEADER: 사용한 해쉬 알고리즘 -> HS256 PAYLOAD: 담을 내용 SIGNATURE: 서명 (ID+PASSWORD) 기존 로그인 방식 = 세션 문제점 세션과 쿠키는 모바일 애플리케이션에서 유효하게 사용할 수 없음(공유 불가) 렌더링된 HTML 페이지가 반환되지만, 모바일 애플리케이션에.. 2021. 8. 28.
Spring 웹 계층의 역할 API를 만들기 위해 필요한 클래스 Request 데이터를 받을 Dto(Data Transfer Object) API 요청을 받을 Controller 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service Service에서 비지니스 로직을 처리하는게 아닌 트랜잭션, 도메인 간 순서 보장의 역할만 함 Spring 웹 계층 Web Layer 흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역 이외에도 필터(Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice) 등 외부 요청과 응답에 대한 전반적인 영역을 이야기 Service Layer @Service에 사용되는 서비스 영역 일반적으로 Controller와 Dao(Data Access .. 2021. 8. 26.
기존 테스트에 Security 적용 test 폴더에 application.yml (테스트 용) 파일 만들기 spring-security-test 추가(build.gradle) PostsApiControllerTest 에 임의 사용자 인증 추가 postsCreate, postsUpdate에 @WithMockUser(roles = "USER") 추가 @WIthMockUser(roles = "USER") 인증된 모의(가짜) 사용자를 만들어서 사용 roles에 권한을 추가할 수 있음 이 어노테이션으로 인해 ROLE_USER 권한을 가진 사용자가 API를 요청하는 것과 동일한 효과 MockMvc에서만 작동함 @SpringBootTest에서 MockMvc를 사용하는 방법 @ExtendWith(SpringExtension.class) @SpringBo.. 2021. 8. 21.
네이버 로그인 추가하기 application-oauth-naver.yml 추가 스프링 시큐리티에선 하위 필드를 명시 할수 없음 최상위 필드만 user_name으로 지정가능 그래서 response를 user_name으로 지정하고 이후 자바 코드로 response의 id를 user_name으로 지정 스프링 시큐리티 설정 등록 OAuthAttributes에 네이버 인지 판단하는 코드와 네이버 생성자만 추가 reference 스프링부트와 AWS로 혼자 구현하는 웹서비스 2021. 8. 21.
Session 저장소로 데이터베이스 사용하기 지금 만든 서비스는 애플리케이션을 재실행하면 로그인이 풀린다 이유는 세션이 내장 톰캣의 메모리에 저장되기 때문이다. 내장 톰캣처럼 애플리케이션 실행 시 실행되는 구조에선 항상 초기화 된다. 또한 2대 이상의 서버에서 서비스 하고 있다면 톰캣마다 세션 동기화 설정을 해야만 한다. 현업에서 쓰이는 3가지 세션 저장소 톰캣 세션 기본적으로 선택되는 방식 톰캣(WAS)에 저장되기 때문에 2대 이상의 WAS가 구동되는 환경에서는 톰캣들 간에 세션 공유를 위한 추가 설정이 필요 MySQL과 같은 데이터베이스를 세션 저장소로 사용 여러 WAS간의 공용 세션을 사용할 수 있는 가장 쉬운 방법 많은 설정이 필요 없지만, 결국 로그인 요청마다 DB IO가 발생하여 성능상 이슈가 발생할 수 있음 Redis, Memcache.. 2021. 8. 21.