본문 바로가기
Backend - Java Spring/Spring Boot 초급

[Boot3] Spring Security (실습 실패)

by VictorMeredith 2024. 2. 14.

1. 스프링 시큐리티

- 인증/인가 해주는거

- 보안을 담당하는 스프링의 하위 프레임워크

- CSRF, 세션 고정 공격 방어 등 보안

- 스프링필터체인 방식으로 작동

- 필터가 겁나 많은데 이건 검색해보면 다 나온다.

- 구현만 할거임 나는

// SecurityContextPersistenceFilter : SecurityContext를 HTTP session에 저장하거나 읽어오는 역할을 한다.
// LogoutFilter : 로그아웃을 처리하는 필터
// UsernamePasswordAuthenticationFilter : 인증관리자. 폼 기반 로그인에 사용되는 필터로 사용자명과 비밀번호를 사용하여 인증을 처리한다.
// DefaultLoginPageGeneratingFilter : 기본으로 설정하는 로그인 페이지 관련 필터
// BasicAuthenticationFilter : 요청 헤더에 있는 아이디와 비밀번호를 파싱해서 인증 요청을 위임한다. 
// RequestCacheAwareFilter : 요청 캐시를 처리하는 필터
// SecurityContextHolderAwareRequestFilter : 시큐리티 관련 서블릿 API를 HttpServletRequest 객체에서 사용할 수 있도록 도와주는 필터
// AnonymousAuthenticationFilter : 익명 사용자에 대한 처리를 하는 필터
// SessionManagementFilter : 세션 관리 필터
// ExceptionTranslationFilter : 예외 처리 필터
// FilterSecurityInterceptor : 인가 처리를 하는 필터

2. 실습

1. 의존성 추가하기

thymeleaf 전용 의존성 거시기도 있는데 난 react로 api만 만들어서 쓸거다

 

2. entity 만들기

- UserDetails 를 springSecurity에서 가져와서 사용하게 되고, 반드시 구현을 해주어야하는 부분이 있다.

서버 모니터는 세로로 사자

 

3. Repository 구현

- findByEmail 메서드 인터페이스를 만들어준다.

- 명명 규칙이 있다.

- ex) findByName() : name 컬럼 중 파라미터값과 같은 데이터 반환 (... WHERE name=파라미터)

- ex2) findByNameAndAge() : 파라미터 중 첫번째 값은 name컬럼과 같은 값 조회, 두번째 값은 age컬럼과 같은 값 조회해서 반환 (WHERE name=파라미터1 AND age=파라미터2)

- ex3) findByNameOrAge() : OR이다.

 

4. 서비스

 

5. 시큐리티 설정하기

CRA(SPA) 에 맞게 커스터마이징

 

- requestMatchers() : 특정 요청과 일치하는 url에 대한 액세스

- permitAll() : 누구나 접근이 가능하게 설정

- anyRequest() : 위에서 설정한 url 이외의 요청에 대해서 설정

- authenticated() : 별도의 인가는 필요하지 않지만 인증이 접근 가능

- loginPage() : 로그인 페이지 경로

- defaultSuccessUrl() : 로그인이 완료되었을 경우 이동할 경로

- logoutSuccessUrl() : 로그아웃이 완료되었을 때 이동할 경로

- invalidateHttpSession() : 로그아웃 이후 세션을 전체삭제할지 여부 설정

- csrf 설정은 비활성화되어있음

- userDetailsService : 사용자 정보를 가져올 서비스 설정(반드시 UserDetailsService를 상속받은 클래스여야함)

- passwordEncoder() : 비밀번호 암호화를 위한 인코더 설정

 

6. 서비스 메서드 코드 작성

- AddUserRequest DTO 생성

 

- UserService

 

7. 컨트롤러 작성하기

 

 

 

 

 

아 순환참조 개빡친다 

 

다른걸로 다시해야겠다..

댓글