Spring
-
Spring MVC - ArgumentResolver을 활용한 애노테이션 만들기Spring/Spring MVC 2022. 2. 9. 17:04
ArgumentResolver을 활용한 애노테이션 만들기 다음과 같은 핸들러가 있다 @GetMapping("/") public String homeLoginV3Spring( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { .... } 핸들러의 파라미터중 Member loginMember는 key 값으로 @SessionAttribute 어노테이션을 이용해 Session 영역에 저장되어있는 해당 Member타입의 객체를 가져온다. 잘못된 방법은 아니지만 위 방법보다 더 보기 간편하고 편리하게 사용할 수 있도록 @SessionAttribute의 모든 파라미터 설정값을 갖는..
-
Spring MVC - interceptor를 이용한 요청 로그 기록과 로그인 체크Spring/Spring MVC 2022. 2. 9. 16:47
interceptor를 이용한 요청 로그 기록과 로그인 체크 웹 페이지에서는 특정 사용자에게만 보여주는 페이지 또는 로그인을 한 사용자에게만 보여주는 페이지 등 URL에 따라 접근할 수 있는 조건을 체크해줘야 한다. 만약 URL의 접근 조건을 체크해주지 않으면 일반 사용자가 관리자 페이지로 들어갈 수 있거나 로그인을 하지 않는 사용자가 로그인한 사용자에게만 보이는 페이지(정보 수정 등)의 페이지로 들어갈 수 있는 등의 문제가 발생한다. 따라서 특정 페이지의 조건을 체크해줘야 하는데 컨트롤러에 조건을 체크하는 로직을 하나하나 작성하면 코드 중복이 발생할 뿐만 아니라 나중에 유지 보수할 때 해당 로직을 일일이 찾아서 수정해야 하는 번거로움이 생긴다. 특정 페이지의 조건을 체크하는 공통의 관심사(Cross-C..
-
Spring MVC - Filter를 이용한 요청 로그 기록과 로그인 체크Spring/Spring MVC 2022. 2. 9. 12:47
Filter를 이용한 요청 로그 기록과 로그인 체크 웹 페이지에서는 특정 사용자에게만 보여주는 페이지 또는 로그인을 한 사용자에게만 보여주는 페이지 등 URL에 따라 접근할 수 있는 조건을 체크해줘야 한다. 만약 URL의 접근 조건을 체크해주지 않으면 일반 사용자가 관리자 페이지로 들어갈 수 있거나 로그인을 하지 않는 사용자가 로그인한 사용자에게만 보이는 페이지(정보 수정 등)의 페이지로 들어갈 수 있는 등의 문제가 발생한다. 따라서 특정 페이지의 조건을 체크해줘야 하는데 컨트롤러에 조건을 체크하는 로직을 하나하나 작성하면 코드 중복이 발생할 뿐만 아니라 나중에 유지보수할 때 해당 로직을 일일이 찾아서 수정해야 하는 번거로움이 생긴다. 특정 페이지의 조건을 체크하는 공통의 관심사(Cross-Cutting..
-
Spring MVC - Session을 이용한 로그인 처리 (HttpSession, @SessionAttribute), 세션 정보 조회Spring/Spring MVC 2022. 2. 8. 22:28
Session을 이용한 로그인 처리 HttpSession은 이미 이전에 직접 구현한 Session 기능과 거의 같은 방식으로 제공해준다. 쿠키 이름은 JSESSIONID이며 값은 추정 불가능한 랜덤 값으로 되어있다. HttpSession을 이용하여 로그인 처리를 구현해보자. HttpSession을 이용한 로그인 처리 Session에 사용할 상수 HttpSession에 데이터를 보관하고 조회할 때 같은 이름이 중복되어 사용되므로 상수를 정의 public class SessionConst { public static final String LOGIN_MEMBER = "loginMember"; } 세션 생성과 조회 - 로그인 HttpSession은 HttpServletRequest를 통해 가져올 수 있다. -..
-
Spring MVC - Session을 직접 구현하여 로그인 처리Spring/Spring MVC 2022. 2. 8. 20:34
Session을 직접 구현하여 로그인 처리 Cookie를 이용하여 로그인 처리를 하게 되면 여러 가지 보안 이슈가 있었다. 이 문제를 해결하기 위해서는 로그인 정보(노출되면 안 되는 중요한 정보)는 모두 서버에 저장해야 되며 저장된 정보를 매핑할 수 있는 임의의 토큰(Sessionid)을 부여한다. Session 동작 방식 로그인 : 사용자가 로그인 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다. Session 생성 : UUID를 이용하여 세션 ID를 생성한다. 생성된 세션 ID와 세션에 로그인 정보를 서버의 세션 저장소에 보관한다. Sessionid를 응답 쿠키로 전달 : 클라이언트와 서버는 결국 쿠키로 연결이 되어야 한다. 서버는 클라이언트에게 세션 ID만 쿠키에 담아서 전달한다. 클라이언트..
-
Spring MVC - Cookie를 이용한 로그인 처리와 문제점Spring/Spring MVC 2022. 2. 8. 18:20
Cookie를 이용한 로그인 처리와 문제점 웹 페이지 화면 Cookie를 이용한 로그인 처리 로그인의 상태를 페이를 요청할 때마다 쿼리 파라미터로 전달하여 유지하는 것은 매우 어렵고 번거로운 작업이 된다. 쿼리 파라미터를 통해 로그인의 상태 정보를 전달하는 것이 아닌 Cookie를 이용하면 로그인 상태 정보를 쉽게 전달할 수 있다. 로그인 요청 시 회원의 정보와 일치하면 쿠키 생성 - 중요한 정보를 쿠키에 담지 않고 회원을 식별할 수 있는 key값을 전달 - 클라이언트에서 해당 쿠키 정보를 저장 페이지 요청 시 쿠키 정보를 전달하여 서버에서 전달받은 쿠키 정보로 회원 저장소에 저장되어 있는 회원을 확인 - 페이지 요청할 때마다 쿠키 정보를 서버에 전달 - 쿠키 정보로 로그인 상태 유지 Cookie의 종류..
-
Spring MVC - HTTP API 메시지(JSON)의 Bean ValidationSpring/Spring MVC 2022. 2. 7. 16:58
HTTP API 메시지(JSON)의 Bean Validation @ModelAttribute : HTTP 요청 파라미터(URL 쿼리 파라미터, POST Form)를 타룰 때 사용 @RequestBody : HTTP Body의 데이터를 객체로 변환할 때 사용(JSON) Bean Validation는 HttpMessageConverter를 사용하는 @RequestBody에도 적용할 수 있다. API Bean Validation 데이터 바인딩 시 타입 검증 오류가 발생하면 JSON을 객체로 생성하는 것 자체를 실패한다. (객체 생성에 실패하면 컨트롤러 자체가 호출되지 않고 예외가 발생) 타입 검증을 통과하면 JSON을 객체로 생성하여 Bean Validation을 수행한다. @Slf4j @RestControl..
-
Spring MVC - Bean Validation을 위한 Form 전송 객체 분리 (DTO)Spring/Spring MVC 2022. 2. 7. 15:43
Bean Validation을 위한 Form 전송 객체 분리 Form 전송 객체 분리 이유 일반적으로 데이터를 등록할 때와 수정할 때의 요구사항은 다르기 때문에 등록 폼과 수정 폼의 객체 필드에는 검증 애노테이션을 다르게 적용해야 한다. 각 필드에 검증 애노테이션을 다르게 적용하는 방법은 다음과 같이 2가지 방법이 있다. BeanValidation의 gruops 기능을 사용 Item을 직접 사용하지 않고, ItemSaveForm, ItemUpdateForm 같은 폼 전송을 위한 별도의 객체를 만들어서 검증에 사용 하지만 groups 기능은 실무에서 잘 사용하지 않는다. 그 이유는 groups 기능 추가로 인한 복잡도 증가와 등록 폼과 수정 폼에서 전달하는 데이터가 Item 도메인 객체와 딱 맞지 않기 때..