MVC패턴에서 Spring의 Tomcat, React.js는 다른 서버를 사용하므로 로그인과 관련된 정보를 백엔드가 전부 관리하기 불가능
Spring Security와 Token으로 연결, Token으로 프론트와 백엔드가 정보를 주고받음
프로젝트 설정
spring 프로젝트는 보통 jsp대신 프로젝트 기본 구조가 thymeleaf
- jsp 사용해도 되긴 함
- 기본 폴더 src/main/resources의 template에 thymeleaf 생성함 - 확장자 html타입

프로젝트 생성 시 Spring Security, thymeleaf 추가

프로젝트 실행하면 console에 패스워드가 나옴

로그인창 안 만들어도 spring security프로젝트에 포함하면 기본 로그인창 있음
아이디 user 해당 패스워드 입력하면 로그인 가능
로그인 하면 root로 자동으로 이동함

참고 -> 경로 2개 설정하는 법

Spring Security 아키텍처
token을 생성해 사용한다.
(Security session은 프론트가 공유할 수 없으므로 token을 사용해 공유한다.)
-> 직접 구현해야 하는 부분
UserDetailsService
해당 인터페이스를 상속받아서 Service를 만들어야 한다.
UserDetails
데이터베이스와의 연결을 위한 Entity인 User가 UserDetails type이여야 한다. (2가지 방법)
- UserDetails 상속받기
- UserDetails 포함관계 만들기(이걸로 사용)
이 두가지만 설정하면 나머지 부분은 Spring Security에서 자동으로 해준다.
10. 로그인 후 Spring Security Session으로 user객체를 넣어준다.

Config
필터 체인에 내가 생성한 spring security 객체를 끼워넣어 사용
로그인 필수, 권한 설정, 내가 만든 로그인 폼을 사용할건지, 로그인 url 설정 등의 기능을 가진다.

로그인시 패스워드 암호화 하는 객체 생성해야 함

Auth
UserDetails
User Entity와 포함관계를 만들어준다.
UserDetail을 상속받는 PrincipalDetail 클래스를 만들어 User를 포함시킨다.
또 다른 방법으로는 User에 UserDetail을 직접 상속 받는 방법이 있다.


UserDetailsService
UserDetailService를 상속받는 PrincipalDetailService를 사용한다.

Controller
config에서 설정하지 않고 controller에서 권한 설정할 수 있음
@Secured 또는 @PreAuthorize 사용
@PreAuthorize 는 권한이 한 개 또는 여러개 일 때,
@Secured 는 권한이 한 개일 때 사용한다.


@AuthebticationPrincipal
session의 user 정보를 가져온다.

config에서 spring의 체인 필터 안에 spring security 필터 객체를 생성해 제어권을 spring에 넘겨주면서 넣어줬으므로
/login으로 접속 후 로그인을 하면 config에서 설정한 /loginProc으로 이동한다.
/loginProc이 호출되면 역제어로 권한을 넘겼기에 UserDetailService를 구현한 PrincipalService의 함수가 호출된다.
로그인을 진행하고 spring security session을 만드는데, 이 안에는 Authentication타입의 객체만 들어간다. 또한 Authentication안에는 UserDetail 타입의 객체만 들어가므로 UserDetail을 구현한 PrincipalDetail을 이용하여 Entity인 User의 정보를 넣어준다.
'Project > Spring' 카테고리의 다른 글
| JWT(Json Web Token) (2) | 2024.11.07 |
|---|---|
| React.js와 SpringBoot 연동하기 (3) | 2024.10.30 |
| JPA Query DSL (3) | 2024.10.22 |
| JPA Database (6) | 2024.10.16 |
| SpringBoot(Gradle) (6) | 2024.10.14 |