Programming-[Backend] (421) 썸네일형 리스트형 [스프링 웹MVC-2] 11. 로그인 - 세션 활용 1. 쿠키의 보안 문제 쿠키는 클라이언트에서 서버로 전달하는 것이기 때문에 위·변조가 가능하다. 예를 들어 아래 사진과 같이 Application 탭에서 memberId 쿠키의 값을 임의로 변경할 수 있다. 이렇게 변경하면 마치 다른 memberId를 가진 사용자로 로그인 한것처럼 되어 정보를 탈취할 수 있게 된다. 또한 혹시 쿠키에 신용카드 정보나 민감정보를 담고 있는 경우, 나의 PC가 해킹을 당하거나 네트워크 전송 구간에서 정보를 탈취당하는 경우가 생길 수 있다. 그래서 다음과 같은 방법을 통해서 쿠키의 보안 취약점을 보완할 수 있다. 쿠키에 중요한 값을 넣지 않는다. 그리고 예측불가능한 랜덤값을 넣어준 다음 서버에서 토큰과 사용자 id를 매핑하여 인식하도록 한다. 그리고 토큰값은 서버에서만 관리하.. [스프링 웹MVC-2] 10. 로그인 - 기본 기능, 쿠키 적용 1. 프로젝트 생성, 도메인 정의 강의의 login 프로젝트를 가져와서 학습한다. 패키지 구조를 살펴보면, 크게 domain과 web으로 나눠져 있는 것을 볼 수 있다. 도메인 여기서 도메인이란, 화면, UI, 기술 인프라 등을 제외한 시스템이 구현해야하는 핵심 비즈니스 로직이 담긴 영역을 의미한다. 나중에 web이 다른 기술로 바뀌더라도 domain은 유지되어야 개선이 가능하다. 따라서 domain은 web을 의존, 참조하지 않도록 설계하는 것이 매우 중요하다. 2. 회원 가입 기능 개발 홈화면 작성 우선 home 화면을 만든다. templates 폴더에 home.html 파일을 복사한다. 회원 가입 기능 개발 이제 회원 가입 버튼을 누르면 회원가입이 되도록 만들어본다. 우선 회원 정보 클래스인 Mem.. [스프링 웹MVC-2] 9. 검증(Validation) - groups, 객체 분리 적용, API 전송에서의 성공, 실패 케이스 1. groups 동일한 모델 객체를 상품 등록과 상품 수정 두 군데에서 사용하기 위해서, Bean Validation의 검증 기능 중 하나인 groups를 적용해보자. 구분을 위한 interface, SaveCheck, UpdateCheck를 2개 만들어준다. 그리고 Item 객체에는 groups 속성을 주면된다. java/hello/itemservice/domain/item/Item.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @Data public class Item { @NotNull(groups = UpdateCheck.class) private Long id; @NotBlank(groups = {SaveCh.. [TIL][중요]Entity의 필드값 변경은 Service가 아닌 Entity에서 처리 Entity의 필드값 변경은 Service 코드 내에서가 아니라 Entity 코드 내에 작성하는 것이 좋다. 왜냐하면 어떤 Entity를 여러 서비스에서 사용할 수 있기 때문이다. 예를들어, 다음과 같은 1: N 연관관계를 갖는 엔티티가 있다고 가정하자. General 엔티티에 Soldier 엔티티가 1 : N으로 연결되어 있다. 서비스코드에서 파라미터로 받아온 dto의 값들을 general 엔티티 내부의 soldier 엔티티의 필드값으로 Set하는 addSoldiers 메서드는, 서비스 코드에서 작성하는 것이 아니라 Entity 코드에서 작성한다. 이렇게 하면 makeArmyServiceImpl 코드에서 뿐만 아니라, 다른 Service 코드에서도 addSoldiers 메서드를 활용할 수 있게 된다. .. [TIL][링크] Predicate, BooleanExpression의 개념과 차이점 Predicate, BooleanExpression 개념 뭐냐 BooleanExpression 클래스는 자바8 문법이다. 조건문을 담을 수 있고, 담은 조건문을 다른 곳에서 활용할 수 있다. 왜쓰냐 조건문이 null일수도 있다. 단순 Builder를 쓰면 문법도 보기 좋지 않고 무슨 조건절인지 한눈에 파악이 어렵다. BooleanBuilder builder = new BooleanBuilder(); if(XxxRepository.getMemberId() != null) { builder.and(....) } 이런식으로 BooleanBuilder에 조건절을 if문을 통해서 하나하나 검사하고, and 메서드로 조건절들을 추가한다. 그리고 완성된 BooleanBuilder를 쿼리문의 조건절에 넣는데, 조건이 .. [스프링 웹MVC-2] 8. 검증(Validation) - Bean Validation 사용하기 1. Bean Validation 어노테이션 적용해보기 Bean Validation 개념 자바 if 코드로 작성했던 특정값이 null이거나 blank가 있으면 안된다. , 숫자값은 최소값 ~ 최대값 사이여야 한다는 검증 조건 등은 매우 기본적인 조건이다. 이런 간단한 제약조건은 어노테이션으로 지원이 되는데, 이런 검증 내용을 표준화하고 자동화해주는 것이 Bean Validation 이다. Bean Validation은 구현체가 아니라, Bean Validation 이라는 JSR-380의 표준기술이다. 하이버네이트 Validator의 공식사이트는 다음과 같다. https://beanvalidation.org/2.0/ 2. Bean Validation 테스트 라이브러리 추가하기 본격적인 사용에 앞서, Bea.. [스프링 웹MVC-2] 7. 검증(Validation) - 오류코드, 메시지 처리 이제 검증된 내용을 앞서 배운 메시지로 공용화하여 처리하는 방법을 배운다. 이렇게 공용화함으로써 유지보수에 유리하고, 계층적인 오류 및 메시지 관리가 가능하게 된다. 살펴볼 순서는 다음과 같다. 1. FieldError, ObjectError 객체의 codes, arguments 파라미터 알아보기 2. bindingResult의 rejectValue, reject 사용해보기 3. 범용적 메시지 처리 4. 처리 원리 : MessageCodesResolver 5. 오류 메시지 계층화 하기, ValidationUtils 6. 스프링이 만든 오류 처리 : typeMismatch 1. FieldError, ObjectError 객체의 codes, arguments 파라미터 앞선 글에서 FieldErrors와 Ob.. [스프링 웹MVC-2] 6. 검증(Validation) 개선 : BindingError, FieldError, ObjectError 1. 코드 개선을 위한 코드 복사 및 변경 코드 replace 검증을 위한 코드를 개선해본다. 우선 앞선 글에서 작성한 코드를 복사해서 V2 버전으로 만든다. 코드 내에 있는 v1, V1 부분을 v2, V2로 만드는데, 변경을 원하는 코드를 블록하고, [Ctrl + R]을 누르면 intelliJ에서 선택하여 변경, replace All 기능을 제공한다. 디렉토리 내 단어 변경 [Ctrl + Shift + R]을 누르면 디렉토리 내부의 단어들을 전부 바꿔줄 수 있다. 2. BindingResult 적용 : 기본 에러의 종류와 메시지를 담는 errors 객체를 직접 생성하는 것이 아니라, 스프링에서 제공하는 BindingResult 객체를 사용하도록 한다. BindingResult 객체는 View로 넘기는 .. 이전 1 ··· 40 41 42 43 44 45 46 ··· 53 다음