예시)





ㄴ hasErrors() : 한개라도 reject 또는 rejectValue가 호출되면 true = 검증 실패했다는 말



ㄴ 포스트로 바뀌었음에도 검증에서 걸려서 넘어가지 않는 모습

ㄴ 여기서 걸림

ㄴ 검증 잘 통과하면 로그인 페이지로 넘어가는 모습

ㄴ 스크립트로 에러메세지 보여주는게 아니라 바로 나오는 에러메세지


ㄴ 이렇게




예시) 에러코드 넣기

ㄴ 공통/에러/유효성 으로 분리해서 관리
ㄴ 연동 설정 : 메세지 소스라는 빈에 정의(인터페이스)

ㄴ 연동 설정 : 메세지 소스라는 빈에 정의(인터페이스)



ㄴ rejectValue("필드명", "에러코드", "기본메세지"); : "기본메세지" : "에러코드"가 없을때 나오는 문구
ㄴ "에러코드" 문구가 나옴

ㄴ 범위 한정하기

ㄴ 네입값이 필드명이다!!! = 전송하는 항목
ㄴ 양식은 데이터를 전송하는 목적인데 네임속성을 가지고 전송 (아이디가 아니다!!!)

ㄴ 필드명, 에러코드, 기본메세지
ㄴ 기본메세지 : 에러코드가 정의된게 없을 때 나오눈 문구

ㄴ 약관동의 : 에로코드.커맨드객체.필드명으로 한정
ㄴ 약관동의는 어떤 약관인지에 따라 문구가 다르기 대문에 더더 한정

예시) 검증 추가_이메일 중복한지, 비밀번호 자리수 체크 등등...


ㄴ 에러코드.필드명
ㄴ 에러코드.커맨드객체명.필드명
예시) Bean Validation

ㄴ 이렇게 정의 잘 안함
ㄴ 이렇게 많이쓰는 검증은 Bean Validation에 이미 있음 애노테이션통해 알려주기만 하면 됨
참고) String Utils
- 문자열 관련된 편의 기능
참고) 타임리프
#fields.errors("필드명") : -> errors 객체 담긴 메세지를 필드명으로 조회 -> 배열
<form:errors path="필드명" /><br> 구분(delimiter)
예시)

ㄴ 이거 너무 길다

ㄴ 근데 이거보다 더 좋은거 있어서 이것도 사용거의 안 할 예정...

예시) 에러코드 넣기

ㄴ 공통/에러/유효성 으로 분리해서 관리
ㄴ 연동 설정 : 메세지 소스라는 빈에 정의(인터페이스)

ㄴ 연동 설정 : 메세지 소스라는 빈에 정의(인터페이스)



ㄴ rejectValue("필드명", "에러코드", "기본메세지"); : "기본메세지" : "에러코드"가 없을때 나오는 문구
ㄴ "에러코드" 문구가 나옴

ㄴ 범위 한정하기

ㄴ 네입값이 필드명이다!!! = 전송하는 항목
ㄴ 양식은 데이터를 전송하는 목적인데 네임속성을 가지고 전송 (아이디가 아니다!!!)

ㄴ 필드명, 에러코드, 기본메세지
ㄴ 기본메세지 : 에러코드가 정의된게 없을 때 나오눈 문구

ㄴ 약관동의 : 에로코드.커맨드객체.필드명으로 한정
ㄴ 약관동의는 어떤 약관인지에 따라 문구가 다르기 대문에 더더 한정

예시)


ㄴ 이거 없어도 이미 전역에 밸리데이터 적용해서 실행 됨
ㄴ @밸리드 : 이걸 보고 전역에 적용할 검증 찾아냄

ㄴ 이거 전역밸리데이터
@InitBinder
protected void InitBinder(WebDataBinder binder) {
binder.setValidator(new RegisterRequestValidator());
}
예시)

![]
ㄴ 검증 성공 후 서비스 처리하는 로직

참고
ㄴ 자바x인지
ㄴ 자카르타인지 체크하고 의존성 추가하기
@AssertTrue
@AssertFalse
@DecimalMax
@DecimalMin
@Max
@Min
@Digits
@Size
@Null
@NonNull
@Pattern
@NotEmpty
@NotBlank
@Positive
@PositiveOrZero
@Future
@FutureOrPresent
@Past
@PastOrPresent


ㄴ 낫블랭크 : 필수항목검증 // 가장 많이 사용할 것
ㄴ 이메일 : 이메일 형식 체크
예시) Bean Validation + 기본 애노테이션으로 안되는 검증 Validator를 정의

ㄴ 이렇게 정의 잘 안함
ㄴ 이렇게 많이쓰는 검증은 Bean Validation에 이미 있음 애노테이션통해 알려주기만 하면 됨

ㄴ 주석함

ㄴ 이 커맨드 객체가 검증대상이라는 걸 알려줘야 함

ㄴ @Valid : 이 커맨드 객체가 검증대상이라는 걸 알려줌

ㄴ 검증 실패 시 errors객체에 담아줌
ㄴ 무조건 커맨드 객체 바로 뒤에 에러객체가 있어야 담김!!!, 중간에 추가하거나 앞에오거나 등등 그러면 안담김
ㄴ 커맨드 객체 바로 뒤 = 에러객체!!!

ㄴ 기본메세지가 default로 설정되어 있고 그 메세지가 나온 모습

ㄴ 이걸 정의하면 사용자정의 메세지가 나옴

ㄴ 메세지 정의함
ㄴ 문구가 바뀜

ㄴ @빈 밸리데이터 에서 못하는 검증 빼고는 다 주석처리함

ㄴ 에러코드.필드명
ㄴ 애노테이션명=에로코드명


검증항목)
1) 필수 항목 검증 (이메일, 패스워드)
2) 이메일로 회원이 조회되는지 검증
3) 조회된 회원의 비밀번호가 입력한 값과 일치하는지 검증

ㄴ 맨밑에는 default라서 굳이 오버라이딩 안해도 됨
ㄴ 위에 2개는 무조건 오버라이딩 해야하는 추상메서드





ㄴ rejectValue = 보안성 취약 -> reject형태로


ㄴ 에러메세지가 아이디나 비번 옆에서 나오는게 아니라 커맨드 객체 그 자체에서 출력

ㄴ 이렇게 코드 쓰면

ㄴ 이 조건 식 필요 없음


ㄴ 1. 요청이 오자마자 세션 생성

ㄴ 2.

ㄴ 3. 의존성으로 세션 생성


예시)





ㄴ 로그인 -> 메인페이지 -> 다시 로그인 창 감
ㄴ 세션이 유지되는 모습 쳌


ㄴ 제거된 세션
예시) @SessionAttribute("이름") : 세션 값 조회 및 주입


ㄴ 오류 발생

ㄴ 해당 세션이 없으면 오류 발생


ㄴ 로그인 -> 메인페이지 -> 다시 로그인 창 감
ㄴ 세션이 유지되는 모습 쳌

ㄴ 로그아웃
예시) 설문조사

ㄴ 여러개의 페이지로 구성된 양식
ㄴ 페이지 구성하고 커맨드객체 구성할거임


ㄴ 질문 2개/질문 2개/질문출력 이렇게 구성예정
ㄴ 컨트롤러쪽에 연동할거임

ㄴ 컨트롤러쪽에 커맨드 객체 연동
ㄴ 겟 방식일때는 모델어트리뷰트 해줘야함

ㄴ step1 뷰 구성

ㄴ step2 뷰 구성

ㄴ step3 뷰 구성

ㄴ 질문1,2 값이 안넘어옴
예시) 여러페이시 데이터 넘겨주기_히든

ㄴ 히든값으로 값 넘겨주기

ㄴ 이렇게 담겨있음
ㄴ 근데 이렇게는 하드 코딩임
ㄴ 질문이 100문항이면 어떡함
-> 세션어트리뷰트 : 모델쪽에 커맨드객체를 속성으로 넣어줌?
예시) 여러페이시 데이터 넘겨주기_세션어트리뷰트(매직 폼) = 양식에 있는 값을 유지할 때 활용





ㄴ 위에 이렇게 해서 아래 겟에 매개변수는 없애도 됨

ㄴ 동일하게 값 유지

ㄴ 요청쪽에 넣으면 알아서 객체가 주입된다?



ㄴ 상단 : 커맨드 객체
ㄴ 하단 : 세션

ㄴ 양식데이터에는 이거 없음


ㄴ 네임값이 없음 : 양식을 통해서 값이 넘어온게 아님
ㄴ 세션쪽에 q1,q2의 값이 있다

ㄴ 세션쪽에 값이 담겨있고
ㄴ 세션쪽에 있는 값을 커맨드 객체에 주입해줌

ㄴ 세션쪽에 값이 담겨있고
ㄴ 세션쪽에 있는 값을 커맨드 객체에 주입해줌
ㄴ 음 근데 세션 비운후에도 값이 유지되네

ㄴ 세션을 매번 가져오게 하면 찐 세션 비운 후에 값 나올거임
ㄴ 음 그래도 안되네ㅎ
ㄴ 나중에 하쟈

ㄴ 시점 체크

ㄴ 프리핸들 시점 : 핸들러매핑 이후 핸들러 어댑터 이전

ㄴ 포스트핸들 : 핸들러어댑터 이후

ㄴ afterCompletion 시점

ㄴ 반환값 쳌

ㄴ postHandle : 매개변수에 모델엔뷰 쳌

ㄴ afterCompletion : 매개변수에 에러 쳌
예시) 회원전용페이지

ㄴ preHandle 오버라이딩

ㄴ url가지고 인터셉트가 적용될 범위 설정하기

ㄴ 설정 추가함


ㄴ 인터셉트 적용 범위 설정









ㄴ 아직 안배워서 그렇지 이런식으로 통제 잘 안하고 있는 프레임워크 쓴다고...
* : 0개 또는 그 이상의 글자** : 0개 또는 그 이상의 폴더 경로? : 1개 글자예시)




ㄴ 쿠키값을 리퀘스트통해 조회한게 아니라
ㄴ 빈을 통해 조회?
예시) 7/16

ㄴ 쿠키가 저장된 모습

ㄴ req 메서드
ㄴ 쿠키 조회
ㄴ 아쉽지만 개별 쿠키조회메서드는 없음
-> 스프링 : @CookieValue : 개별 쿠키값 조회


올라왔다! 돌격!