스프링/스프링 MVC 패턴
-
서블릿 Http 세션스프링/스프링 MVC 패턴 2023. 2. 28. 23:48
쿠키를 이용해서 하는 것은 보안 문제가 있기 때문에 세션을 이용하는 것이 좋다. 세션이라는 것은 임의의 특이한 코드를 사용자에게 무작위로 줘서 고유의 값으로 서버와 연결할 수 있게 해주는 것이다. 서블릿에서 지원하는 세션 기능을 사용해서 구현할 수 있다. @PostMapping("/login") public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletRequest request) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLog..
-
로그인 페이지 만들기스프링/스프링 MVC 패턴 2023. 2. 28. 15:34
회원 가입 페이지를 만들었으니 이제 로그인을 할 수 있는 페이지를 만들 것이다. 로그인 페이지만 만드는 것이고, 로그인이 성공하면 로그인 성공 페이지로 이동하고 실패하면 에러를 출력하는 페이지이다. 우선 도메인에 LoginService 클래스를 만들었다. @Service @RequiredArgsConstructor public class LoginService { private final MemberRepository memberRepository; /** * @return null이면 로그인 실패 */ public Member login(String loginId, String password) { return memberRepository.findByLoginId(loginId) .filter(m -..
-
상품 등록 전 로그인하기 - 회원가입 페이지 만들기스프링/스프링 MVC 패턴 2023. 2. 28. 14:19
상품을 등록하고 수정하는데 아무나 할 수가 있기 때문에 상품 등록을 하기전에 로그인 페이지를 만들어서 로그인이 된 사람만 상품 등록 및 수정을 할 수 있도록 만들 것이다. java.hello.login.domain.member에 Member 객체 클래스 생성 @Data public class Member { private Long id; @NotEmpty private String loginId; // 로그인 ID @NotEmpty private String name; // 사용자 이름 @NotEmpty private String password; } MemberRepository 클래스 생성 @Slf4j @Repository public class MemberRepository { private sta..
-
등록과 수정의 검증 분리 - V4스프링/스프링 MVC 패턴 2023. 2. 25. 17:37
등록과 수정은 항상 같은 값들이 넘어오는 것이 아니라 부가적인 데이터가 많기 때문에 등록과 수정을 분리해주는 것이 좋다. 등록을 위한 ItemSaveForm package hello.itemservice.web.validation.form; import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data public class ItemSaveForm { @NotBlank private String it..
-
상품 수정 검증, 검증 groups - V3스프링/스프링 MVC 패턴 2023. 2. 25. 16:50
@PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @Validated @ModelAttribute Item item, BindingResult bindingResult) { if (item.getPrice() != null && item.getQuantity() != null ) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { bindingResult.addError(new ObjectError("item", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice)); } ..
-
스프링 자동 검증기(Bean Validation)스프링/스프링 MVC 패턴 2023. 2. 25. 16:38
검증을 일일이 개발자가 코딩을 하는 방법은 매우 비효율적이기에 스프링은 LocalValidatorFactoryBean이라는 글로벌 Validator로 등록된다. @Data public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; Item 객체에 애노테이션들을 넣어주면 우리가 이전까지 했던 모든 검증을 스프링에서 자동으로 해준다. 우리가 이전 게시글에서 엄청 길게 작성된 코드들이 간편하게 애노테이션 몇 개로 줄여질 수 있다. impleme..
-
Validation 분리스프링/스프링 MVC 패턴 2023. 2. 23. 15:23
컨트롤러에서 검증하는 로직이 너무 많이 차지하고 실제 동작 로직은 비중이 작다. 따라서 검증하는 클래스를 따로 분리해서 만드는 것이 효율적이다. ItemValidator 클래스 import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; @Component public class ItemValidator implements Validator { @Override public boolean supports(Class..
-
오류 코드와 메시지 처리스프링/스프링 MVC 패턴 2023. 2. 23. 14:44
FieldError는 2가지의 생성자를 제공한다. public FieldError(String objectName, String field, String defaultMessage); public FieldError(String objectName, String field, @Nullable Object rejectedValue, boolean bindingFailure, @Nullable String[] codes, @Nullable Object[] arguments, @Nullable String defaultMessage) 첫 번째는 위에서 계속 소개한 방식이고 두 번째는 다음과 같다. bindingResult.addError(new FieldError("item", "itemName", item...