[스프링 부트 쇼핑몰 프로젝트 with JPA] 4장 정리
스프링 시큐리티는 스프링 기반 애플리케이션의 보안 솔루션을 제공하며, 회원 가입, 로그인/로그아웃 기능 구현 및 페이지 권한 설정에 사용될 수 있다. 스프링 시큐리티는 인증과 인가 과정을 관리하며, `pom.xml`에 의존성을 추가하여 사용할 수 있다. 회원은 이메일로 구분되며, 각 회원은 역할에 따라 페이지 접근 권한이 부여된다. 또한, 스프링 시큐리티는 CSRF 토큰을 사용하여 모든 POST 방식의 데이터 전송을 보호한다.
Apr 02, 2024
🌼스프링 시큐리티 소개
💡핵심 키워드
- 스프링 시큐리티는 스프링 기반의 애플리케이션을 위한 보안 솔루션(인증/인가 등)을 제공한다.
- 인증이란 해당 리소스에 대해서 작업을 수행할 수 있는 주체인지 확인하는 것이다.
- 인가는 인증 과정 이후에 일어난다. 접근하는 사용자가 해당 URL에 대해 인가된 회원인지를 검사하는 것이다.
🌼스프링 시큐리티 설정 추가하기
💡핵심 키워드
security dependency 추가하기
- 스프링 시큐리티를 사용하기 위해서
pom.xml
에spring-boot-starter-security
의존성을 추가 후Reload Maven Projects
를 클릭하여 의존성을 받아온다.
- 스프링 시큐리티를 추가하였다면 모든 요청은 인증을 필요로 한다.
🌼회원 가입 기능 구현하기
💡핵심 키워드
- 각각의 멤버는 일반 유저인지, 아니면 관리자인지 구분할 수 있는 역할이 있어야 한다.
- 회원은 이메일을 통해 유일하게 구분해야 하기 때문에, 동일한 값이 데이터베이스에 들어올 수 없도록
@Column(unique = true)
를 통해unique
속성을 지정한다.
@Enumerated(EnumType.STRING)
을 통해 자바의enum
타입을 엔티티의 속성으로 지정할 수 있다.- Enum을 사용할 때 기본적으로 순서가 저자오디는데,
enum
의 순서가 바뀔 경우 문제가 발생할 수 있으므로EnumType.STRING
옵션을 사용해서String
으로 저장한다.
Junit
의Assertions
클래스의assertEquals
메소드를 사용해서 저장하려고 요청했던 값과 실제 저장된 데이터를 비교할 수 있다.
Junit
의Assertions
클래스의assertThrows
메소드를 사용해서 예외 처리 테스트가 가능하다.
- 스프링 시큐리티를 사용할 셩우 기본적으로
CSRF(Cross Site Request Forgery)
를 방어하기 위해 모든 POST 방식의 데이터 전송에는CSRF 토큰
값이 있어야 한다. CSRF 토큰
은 실제 서버에서 허용한 요청이 맞는지 확인하기 위한 토큰이다.- 사용자의 세션에 임의의 값을 저장하여 요청마다 그 값을 포함하여 전송하면 서버에서 세션에 저장된 값과 요청이 온 값이 일치하는지 확인하여
CSRF
를 방어한다.
- javax.validation 어노테이션 예시
- 정보를 검증하려는 객체의 앞에
@Valid
어노테이션을 선언하고, 파라미터로bindingResult
객체를 추가해서 결과를 담은 뒤,bindingResult.hasErrors()
를 호출하여 값을 검증할 수 있다.
어노테이션 | 설명 |
@NotEmpty | NULL 체크 및 문자열의 경우 길이 0인지 검사 |
@NotBlank | NULL 체크 및 문자열의 경우 길이 0 및 빈 문자열(” “) 검사 |
@Length(min=, max=) | 최소, 최대 길이 검사 |
@Email | 이메일 형식인지 검사 |
@Max(숫자) | 지정한 값보다 작은지 검사 |
@Min(숫자) | 지정한 값보다 큰지 검사 |
@Null | 값이 NULL인지 검사 |
@NotNull | 값이 NUll이 아닌지 검사 |
🌼로그인/로그아웃 구현하기
💡핵심 키워드
- Spring Security에서 인증은
AuthenticationManager
를 통해 이루어지며AuthenticationManagerBuilder
가AuthenticationManager
를 생성한다.
- 화면을 이용하지 않고 Spring Security를 테스트하려면
spring-security-test
의존성을pom.xml
에 추가한다.
MockMVC
란, 개발한 웹 프로그램을 실제 서버에 배포하지 않고도 테스트를 위한 요청을 제공하는 수단이다. GET, POST, PATCH, DELETE 등의 요청을 만들어 보낼 수 있다.MockMvc
테스트를 위해@AutoConfigureMockMvc
어노테이션을 선언한다.
thymeleaf-extras-springsecurity
라이브러리를 통해 사용자의Authority
를 확인해서 뷰에 적용시킬 수 있다.
🌼페이지 권한 설정하기
💡핵심 키워드
ajax
의 경우http request header
에XMLHttpRequest
라는 값이 세팅되어 요청이 오는데, 인증되지 않은 사용자가ajax
로 리소스를 요청할 경우Unauthorized
에러를 발생시켜서 페이지 권한에 따라 뷰를 보여줄 수 있다.
permitAll()
을 통해 모든 사용자가 인증 없이 해당 경로에 접근할 수 있도록 설정할 수 있다.
🏁결론
해당 내용을 정리하면서 스프링 시큐리티를 이용해 회원 가입 및 로그인/로그아웃 기능을 구현하는 방법, 스프링 시큐리티를 이용해 회원의 역할에 따라서 페이지별 접근 권한을 부여하는 방법을 이해할 수 있었다.
Share article