1) Security - 로그인창 연결
권한이 없는 유저가 접근하면 그걸 가로채서 리다이렉션
17줄 : 명시된 주소로 들어올 때는 인증이 필요하다.
18줄 : 그 외에는 접근을 허용한다.
19~21줄 : 인증이 필요한 페이지를 요청했을 때, 폼태그와 인풋 태그가 있는 폼로그인을 하게 하는데, 그 로그인 페이지가 /auth/signin 이다.
22줄 : 로그인에 성공하면 / 페이지로 가게 한다.
302번 확인할 수 있음 >> 리다이렉션
2) 회원가입
post 이유 : 이 4개의 데이터를 줄 테니, DB에 인서트 해라 (~줘 라는 의미가 아님)
CSRF 토큰??
회원가입창인 클라이언트의 데이터가 서버에 도착하기 전에 시큐리티가 CSRF토큰 검사를 함(=자신이 달아준 토큰이 있는지 검사 >> 정상적인 회원가입페이지를 준 정상적인 사용자라는 것을 알게 됨 / 비정상적인 루트로 들어온 사용자인지를 구분하기 위해)
응답할 때 CSRF토큰을 달아서 응답
SecurityConfig에서 CSRF 기능 비활성화한다.(디폴트 : 활성화)
http.csrf().disable();
DTO Data Transfer Object 통신을 위해서 통신할 때 필요한 데이터를 담아두는 오브젝트
@Data >> getter와 setter를 만들어줌
DTO를 이용해 브라우저에서 입력한 데이터를 받아오게 하고(컨트롤러에서 로그로 확인) 그걸 DB에 Insert하기 위해 모델을 만듦
JPA Java Persistance API : 자바로 데이터를 영구적으로 저장(DB)할 수 있는 API를 제공
12줄 : 전체생성자
13줄 : 빈생성자
15줄 : DB에 테이블을 생성해주는 어노테이션
33줄 : DB에 항상 LocalDateTime을 넣어준다.
35줄 : DB에 INSERT 되기 직전에 실행하는 어노테이션
36~37줄 : LocalDateTime.now()로 DB가 만들어진 현재시각을 자동으로 넣어준다.
이렇게만 하면 PK가 없다는 오류가 발생하므로, 아래와 같이 해준다.
21줄 : id를 PK로 만들고,
22줄 : 번호가 증가할 때 번호증가전략이 DB를 따라간다.
(= MySQL은 incresement, Oracle이면 sequence)
Java에서 오브젝트를 만들면 그 오브젝트를 기반으로 DB에서 table이 만들어짐 >> ORM
빌더 패턴???
@Builder
16줄 : toEntity 함수
18~23줄 : 위의 4개의 데이터(username,password,email,name) 기반으로 만들어진 User 객체를 바로 리턴
DB에 집어넣기 위해 Service~
@Service >> Ioc 등록/트랙잭션 관리
회원가입 진행을 위해서는 레포지토리가 필요 >>인터페이스로 레포지토리 만들기
어노테이션을 하지 않아도 JpaRepository를 상속해 IoC 자동등록 된다.
5줄 : 오브젝트/PK의 타입
Service를 사용하기 위해 불러오기 위한 방법은 2가지이다.
20줄 : 1) @Autowired
23~4줄 : 2) 컨트롤러의 생성자를 아래 만든다. (@Controller가 붙어 있으므로 Ioc에 등록하기 위해서는 컨트롤러 객체를 만들어야 하고, 그러기 위해선 생성자를 실행시켜야 한다. 그러나 생성자 안에 들어가는 서비스가 없으면 오류 발생 >> 의존성 주입=DI)
그러므로,
16,21줄 : final 필드를 DI(의존성주입)할 때 사용
user 오브젝트에 담은 데이터를 저장한 것을 userEntity라고 한다.
????????이 부분 잘 모르겠음..
3)비밀번호 암호화 및 권한
비밀번호를 암호화하기 위해 BCryptPasswordEncoder를 아래와 같이 빈등록 해준다.이후에 서비스에서 DI해서 사용
AuthService
23줄 : 비밀번호를 가져와서 rawpassword에 넣는다.
24줄 : 가져온 비밀번호를 해시암호화 해서 encPassword에 넣는다.
25줄 : 암호화된 비밀번호를 user에 담는다.
27줄 : 가입하는 사용자는 'ROLE_USER'라는 권한을 디폴트로 가진다.
4) 중복가입 방지
도메인의 User.java에서 username에 Unique 설정을 넣는다.
어떤 제약조건에 위배되는 상황을 앞단에서 걸러내느냐, 서버와 DB를 거쳐 뒷단에서 걸러내느냐에 따라,
전처리 validation 유효성검사
후처리 exceptionhandler
로 나뉜다. 길이 제약 등은 전처리로 가능하나 아이디 중복금지 제약 등은 후처리로 해야한다.
회원가입과 같은 핵심기능에 대한 전,후처리를 공통기능이라고 한다. (공통기능이 있어야 깔끔하게 돌아간다) 이를 'AOP 관점 지향 프로그래밍' 이라고 한다.