<Spring Security>
인증 / 인가 절차를 Spring에서 관리해주는 기능
Document : https://docs.spring.io/spring-security/reference/servlet/getting-started.html
Hello Spring Security :: Spring Security
You can now run the Spring Boot application by using the Maven Plugin’s run goal. The following example shows how to do so (and the beginning of the output from doing so): Running Spring Boot Application $ ./mvn spring-boot:run ... INFO 23689 --- [ resta
docs.spring.io
<Spring Security Component>
-Spring Filter : Spring Security는 Filter를 통해 요청이 전달되기 전후의 URL 패턴에 맞는 모든 요청을 필터링해준다.
Filter는 보안검사를 통해 올바른 요청이 아닐경우 차단. 이러한 Filter들의 연속을 Filter chain이라고 한다.
FilterChain에서 필요한 설정을 분리해서 사용하면 된다.
요청이 들어오면 Http객체가 filter를 타고 컨트롤러로 들어올 때, Spring Security가 인증/인가 처리
-AbstractAuthenticationProcessingFilter : 인증을 처리하는 base filter
-UsernamePasswordAuthenticationFilter : AbstractAuthenticationProcessingFilter를 상속받은 Filter
Form Login을 사용할 때 username과 password를 확인하여 인증
Form Login은 인증이 되지 않았다면 로그인페이지를 반환한다.
-SecurityContextHolder : Spring security로 인증을 한 사용자의 상세 정보를 가지고 있는 holder
Holder 안의 SecurityContext객체는 Authentication 객체를 가지고있다.
-Authentication : 인증 객체로, principal // credentials // authorities를 가진다.
principal : 사용자를 식별한다. 보통 UserDetails 인스턴스다
credentials : 주로 비밀번호로, 사용자 인증에 사용한 후에는 비워둔다.
authorities : 사용자에게 부여한 권한을 GrantedAuthority로 추상화하여 사용한다.
-UserDetailsService : 사용자를 조회하고, 검증한 뒤 UserDetails를 반환한다. Custom하여 Bean으로 등록 후 사용가능
-UserDetails : 검증된 UserDetails는 ID/PW token 타입의 Authentication을 만들어 ContextHolder에 세팅할 때 사용. custom 가능
<Spring Security 설정>
build.gradle에 dependency 추가
// 스프링 시큐리티
implementation 'org.springframework.boot:spring-boot-starter-security'
WebSecurityConfig 클래스 생성
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
public class WebSecurityConfig {
@Bean // Bean으로 등록
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// CSRF 설정
http.csrf().disable();
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/api/article").permitAll() <-해당 url로들어오는 GET요청은 허가
.anyRequest().authenticated(); <-나머지 요청은 다 인증을 거치게
// 로그인 사용
http.formLogin(); <-Security에서 사용하는 default form login을 사용하겠다
// ==> 내 커스텀 로그인페이지 쓰고싶으면 formLogin.loginPage(/api/user/내로그인페이지).permitAll();
return http.build();
}
}
====> localhost:8080으로 요청이 들어오면, 권한을 확인한다. 권한이 Ananymous기 때문에, loginPage로 팅군다.
<구현예제>
CRUD 게시판 리팩토링해보기 - <1> Spring Security, Jwt인증 적용
그동안 배운 것들을 적용해 기존 만들었던 CRUD 게시판 처음부터 다시 만들어보기 1.Spring Security 적용 (JWT방식 커스텀 필터 사용) 2.Controller에 @Valid 어노테이션 적용 3.JPA 연관관계 변경 (양방향 ->
imslo.tistory.com
'공부 > Spring' 카테고리의 다른 글
CRUD 게시판 리팩토링해보기 - <2> 프로젝트 구조 만들기, Entity 생성, Exception handler (0) | 2023.04.29 |
---|---|
CRUD 게시판 리팩토링해보기 - <1> Spring Security, Jwt인증 적용 (0) | 2023.04.27 |
ExceptionHandler // ResponseEntity // HTTP 상태 반환 (0) | 2023.04.23 |
간단한 게시판 CRUD // 로그인, 회원가입, JWT 추가 (0) | 2023.04.20 |
Auth // JWT (0) | 2023.04.19 |