분류 전체보기 (999) 썸네일형 리스트형 [스프링 웹MVC-2] 13. 로그인 - 스프링 인터셉터, ArgumentResolver 활용 1. 스프링 인터셉터의 특징과 흐름 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 서블릿 인터셉터와 마찬가지로 웹의 공통 관심 사항을 처리하지만, 좀 더 정밀하게 설정이 가능하다. 인터셉터의 적용 순서는 다음과 같다. HTTP 요청 -> WAS -> 필터 -> 서블릿(DispatcherServlet) -> 스프링 인터셉터1 -> 스프링 인터셉터 2-> ... -> 컨트롤러 서블릿 필터에 비해서, request, response만 받는 것이 아니라 어떤 컨트롤러(handler)가 호출되는지 호출 받을 수 있고, modelAndView도 받을 수 있다. 그리고 preHandle, postHandle, afterCompletion 메서드 순으로 흐름이 진행된다. 구조 자체가 스프링 MVC에 특화되어 있.. [Azure] Azure 정적 파일 공유. 스토리지 파일공유 SAS(공유 액세스 서명) 추가하기 1. 스토리지 만들기 정적 파일을 등록하기 위해서, Azure 스토리지 계정 서비스를 이용한다. 스토리지 계정을 추가하고, 파일 공유에 들어간다 파일 공유를 추가한다. 그리고 파일을 추가한다. 2. 파일 공유를 위한 URL 만들기(SAS) 파일 공유에서 파일을 클릭하고, URL 만들기로 최종 URL의 일부를 만든다. (URL1) 그리고 파일에 접근할 수 있는 공유 액세스 키값(SAS)을 얻어와야 한다. 허용되는 서비스/리소스 종류를 선택하고, : 1개의 파일인 경우 개체를 선택하면 된다. 시작 및 만료 날짜/시간을 지정한 후 SAS 및 연결 문자열 생성이 가능하다.(나는 5년 기한 잡음) 그러면 아래 화면에서 토큰값이 포함된 URL의 쿼리파라미터를 얻을 수 있다. SAS 토큰 이란 이름의 URL(URL2.. [스프링 웹MVC-2] 12. 로그인 - 서블릿 필터 1. 서블릿 필터 개념 이때까지 만든 로그인 기능만으로는 사용자의 로그인 여부에 따라 웹페이지 내 특정 url로의 접속을 허용하거나 제한할 수 없다. 이런 기능을 지원하는 것이 서블릿 필터이다. 물론 로그인 여부만 검사하는 것이 아니라 컨트롤러에 접근 전에 미리 요청의 적절성을 검사해주는 기능 단위라고 이해하면 된다. 다음 글에서 배울 스프링 인터셉터도 마찬가지 기능을 제공한다. 만약 이런 기능들을 이용하지 않고 각 컨트롤러에서 로그인 여부를 직접 확인한다면, 로그인 여부를 확인하는 코드를 모든 컨트롤러들에 일일이 작성해주어야 할 것이다. 요청을 필터링 하는 기능은 각 컨트롤러에서의 공통 관심사이기 때문에, 공통 기능으로 통합하는 AOP 개념을 도입할 수 있지만, 웹과 관련된 기능을 공통화할때는 서블릿 .. [비공개] Weekly Report - 21/08/23~21/08/29, 427일차 보호되어 있는 글입니다. [스프링 웹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 메서드를 활용할 수 있게 된다. .. 이전 1 ··· 82 83 84 85 86 87 88 ··· 125 다음