Spring 142

[Spring Security] 3-2. Authentication: Username/Password

1. 인증 정보 습득방식Spring Security는 기본적으로 클라이언트로부터 인증 정보를 얻기 위한 세가지 방법을 지원합니다. 기본적으로 HttpServletRequest 객체로부터 아이디/패스워드 정보를 얻습니다. 종류구분FormBasicDigest설명HTML 폼을 통해 아이디/비밀번호를 입력받아 인증HTTP 요청 헤더에 Base64로 인코딩된 아이디/비밀번호를 포함nonce 기반 해시값으로 인증 (비밀번호는 평문 전송 안 함)요청 방식POST /login (form-data)Authorization: Basic base64(username:password)Authorization: Digest ...초기 트리거인증 없이 보호된 리소스 접근→ /login 리다이렉트인증 없이 접근 시 → WWW-Au..

[Spring Security] 5. 예외 처리

1. ExceptionTranslationFilter 요청에 대해 SecurityFilterChain의 필터들이 보안 처리 중 발생하는 인증 혹은 인가 예외에 대한 처리를 맡습니다. 인증 예외는 AccessDeniedException, 인가 예외는 AuthenticationException 입니다. 자바 예외와 HTTP Response 의 브릿지 역할을 합니다. AuthenticationException 이 발생할 경우 AuthenticationEntryPoint을 동작시킵니다. 인증 예외에 대해 원하는 동작을 커스터마이징 할 수 있습니다. 사용자를 로그인 페이지로 리다이렉트하거나 적절한 응답코드를 반환하는 등의 작업이 가능합니다. AccessDeniedException 이 발생할 경우 anonymous..

[Spring Boot][KoLiving] 3-2 Sign-up

이전 포스팅 2. 패스워드 설정 악의적인 공격 입력된 패스워드의 데이터는 데이터베이스에 평문으로 저장되면 안됩니다. 데이터베이스가 공격받아 아이디-패스워드가 노출될 수 있습니다. SQL Injection 등 패스워드 정보를 보호하기 위해 부호화를 통한 보안 방식이 권고되었습니다. 단방향 해싱 장점 보안성 해싱 값이 노출되더라도 원본을 알아내기 어렵습니다. 비선형 연산, 혼돈, 확산 등의 성질을 근거로 해시 함수의 복구 안전성이 확보됩니다. 적은 연산 입력받은 패스워드 값이 저장된 해싱값과 일치하는지 여부를 쉽게 얻을 수 있습니다. 단점 레인보우 테이블 단방향 해시값에 대응되는 다양한 원본값을 미리 계산해둔 테이블입니다. 이를 통해 해시값과 일치하는 원본 비밀번호를 빠르게 찾을 수 있습니다. BCrypt ..

Spring/Spring Boot 2023.09.19

[Spring Boot][KoLiving] 3-1 Sign-up

안녕하세요. 이번에는 회원가입에 대해 포스팅하겠습니다. 저희 팀에서는 "인증 이메일을 통해 인증을 받고 회원가입을 진행시키자" 라는 의견이 모였습니다. 저는 이번에 처음으로 인증 이메일을 구현해 보았는데요. 처음 구현해보는 거라 시행착오를 많이 겪었습니다. 그 과정속에서 제가 어떻게 생각했고 구현해 나갔는지 공유해드리려 합니다 1. 이메일 인증 이메일 인증 Flow 1. 해당 이메일의 유효성 검사 2. 인증 이메일 전송 유저 테이블의 정규화가 필요합니다. 사용자가 인증 이메일을 받았지만 실제로 인증 절차를 진행하지 않은 경우가 발생할 수 있습니다. ConfirmationToken 테이블 EMAIL 이메일 발송을 요청한 이메일 TOKEN 서버에서 인증에 대한 검증을 위해 저장합니다. - UUID형 TOKE..

Spring/Spring Boot 2023.09.19

[Spring Boot][KoLiving] 2. i18n

안녕하세요! 이번에는 메시지 국제화를 살펴보고 프로젝트에 적용한 것들을 포스팅 하겠습니다. 1. i18n 이란? "Internationalization"의 축약형이며 단어의 뜻은 "국제화" 입니다. 이는 "특정 언어나 지역에 종속되지 않고 다양한 지역, 언어에서 정상 동작하도록 고려하는 개발"을 말합니다 서버에서 클라이언트의 응답을 내려줄 때, 응답내용이 특정 지역과 언어에 종속되지 않도록 개발하는 것을 목표로 두었습니다. 2. 필요성 메일 전송 프로젝트내에서 사용자에게 메일을 전송하는 기능이 있습니다. (인증 이메일, 비밀번호 재설정 등) 메일은 클라이언트의 모국어로 만들어진 메일로 전송되어야 합니다. 내국인과 외국인에게 전송되어야 하는 메일 언어가 다릅니다. 예외 메시지 로그인 중 잘못된 비밀번호로 ..

Spring/Spring Boot 2023.09.18

[Spring Boot][KoLiving] 1. Validation

안녕하세요. 저는 2023.04부터 비사이드라는 직장인 사이드 프로젝트에 15기에 참가하였습니다.사이드 프로젝트를 진행하면서 공유하고자 하는 내용을 포스팅해보려 합니다. 제가 진행한 사이드 프로젝트는 외국인을 상대로 룸메이트를 매칭해주는 글로벌 서비스입니다.저는 유저 도메인쪽을 맡았고, 회원가입과 인증&인가 기능을 구현했습니다. 첫번째로 포스팅할 주제는 "Validation" 입니다.개념 소개부터 구현까지 공유드리겠습니다 1. Validation 이란클라이언트가 요청중에 전달한 입력값의 유효성 검증을 뜻합니다.클라이언트가 서버 API를 호출할 때 클라이언트는 요청을 함에 있어 입력값을 전달합니다.서버는 입력값이라는 요청값에 대해 유효하다 판단이 되면, 응답을 위한 로직을 수행하게 됩니다. 2. 기술 선정..

Spring/Spring Boot 2023.09.18

[Stomp] Spring Boot with React 채팅 서버 : 3-2. Stomp 기본 설정

1. WebSocketConfig.java 중요한 내용은 주석에 달려있음 @EnableWebSocketMessageBroker websocket의 구현체를 사용할 경우 (대표적으로 stomp) 설정파일에 붙여줌 @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // socketJs 클라이언트가 WebSocket 핸드셰이크를 하기 위해 연결할 endpoint를 지정할 수 있다. registry.addEnd..

Spring/Spring Stomp 2022.03.14

[Stomp] Spring Boot with React 채팅 서버 : 3-1. Stomp 정리 및 설명

이제 서버에서 클라이언트에게 STOMP 연결을 할 수 있도록 핸드쉐이크 endpoint, messageBroker의 pub 및 sub prefix를 설정해 주어야 한다. 해당 설정은 스프링에서 설정하기에 매우 쉽다. 하지만 개념을 알아야 요구사항에 따른 구현이 가능하므로 일단 개념부터 잡아보자 1. Websocket 웹소켓 소개 http는 tcp/ip 기반 비연결지향 프로토콜과 대비 websocket 프로토콜(RFC6455) - 연결지향(연결을 끊지 않음), 양방향통신(클라이언트 서버) 서버와 클라이언트가 지속적으로 TCP 라인을 통해 연결되어 양방향 통신이 가능하게 됨 소켓이 유지되는데 동의할 수 있도록 소켓을 수정함 http header의 keep-alive 속성의 값이 계속되도록 설정되어있음 HTT..

Spring/Spring Stomp 2022.03.02

[Stomp] Spring Boot with React 채팅 서버 : 2. ChatRoomController

1번에서 entity 객체를 만들었으니 이제 chatroom controller 를 만들겠습니다. 생성, 정보 요청, 리스트 전달 등의 1. 채팅방 생성 기본적으로 DM은 1:1 채팅방으로 구현되었습니다. (인스타그램, 페이스북 메신저를 따라 만들려고 하였습니다) 1. 개인 DM 을 위한 방 생성 인스타그램이나 페이스북 처럼 해당 사용자에게 DM을 보내고자 할 경우, 프로필에 가서 "사용자와 채팅" 버튼 누르기 "사용자와 채팅" 버튼을 누를 시, roomMakerId는 누른 사람의 Id이고, guestId는 해당 프로필 계정의 Id입니다. 채팅방을 먼저 생성한 후, 사용자들을 해당 채팅방의 Member로 저장합니다. @PostMapping("/personal") // 개인 DM방 생성 public Hcs..

Spring/Spring Stomp 2022.03.02

[Stomp] Spring Boot with React 채팅 서버 : 1. Entity 디자인

이번에 하는 토이프로젝트에서 DM 기능을 구현하는 파트를 맡게 되었다. 약 한달간 일정을 소모하여 여기저기서 찾아보고 강의도 들어가며 구현은 어느정도 완성이 되었다. 해당 토이프로젝트는 JPA를 사용하였으나 동작원리를 공부하고자 DDL은 직접 생성하였다. (도메인 파트별로 sql문 있음) 일단 도메인 객체 디자인부터 0. ERD Diagram 진한 글씨는 PK 테이블간 선으로 연결된 컬럼은 FK many to many : (ChatRoom - ChatRoom_Members - User) 1. ChatRoom @Data @Entity @Table(name = "ChatRoom") @DynamicUpdate @Builder @EqualsAndHashCode(onlyExplicitlyIncluded = tru..

Spring/Spring Stomp 2022.03.02