728x90
- Spring Security 적용
- JWT(Json Web Token) 발급
- Token Filter 계층 추가 및 권한 부여
- Token 유효성 검사
- Token 데이터 파싱
01. Spring Security 적용
Spring Boot 2.7.6
JDK 11
- Spring Security와 JWT를 테스트하기 위한 Login API를 생성합니다.
- 회원 가입 한 유저만 사용할 수 있는 Review 작성 API를 생성합니다.
- Spring Security를 gradle의 dependency에 추가합니다.
- Security Config 추가하여 스프링 시큐리티를 설정합니다.
UserController 생성
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@PostMapping("/login")
public ResponseEntity<String> login(){
return ResponseEntity.ok().body("token");
}
}
UserController Login API 확인
Talend API Test를 통하여 생성한 Login API가 의도대로 잘 작동하는지 확인합니다.
ReviewController 생성
@RestController
@RequestMapping("/api/v1/reviews")
public class ReviewController {
@PostMapping
public ResponseEntity<String> writeReview(){
return ResponseEntity.ok().body("리뷰 등록이 완료 되었습니다.");
}
}
ReviewController writeReview API 확인
Talend API Test를 통하여 생성한 Login API가 의도대로 잘 작동 하는지 확인합니다.
문제점
이렇게 쉽게 글을 쓸 수 있는 상황이라면, 보안적으로 취약하므로
아무나 들어오지 못하도록 Spring Security로 막아줘야한다.
Spring Security
Spring Security Dependencies추가
build.gradle에 Spring Security Dependency를 추가합니다.
implementation 'org.springframework.boot:spring-boot-starter-security'
Security Config 생성
- configuration 패키지 생성
- SecurityConfig.Class 생성 (클래스 이름은 자유롭게 설정 가능합니다.)
@EnableWebSecurity
@Configuration
public class SecurityConfig {
}
API 호출 테스트
자유롭게 호출되던 API가 Spring Security 등록 후, 막힌 것을 확인할 수 있습니다.
예외 설정
로그인과 회원 가입은 특별한 권한 없이 가능해야 하는 기능이므로 예외처리를 해주어야 합니다.
Security Config 추가
@EnableWebSecurity
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception{
return httpSecurity.
httpBasic().disable()// 인증을 ui로 할 것이 아닌, Token 인증으로 할 것이므로 HttpBaisc을 Disable 한다.
.csrf().disable()
.cors().disable()
.authorizeRequests()
.antMatchers("/api/v1/users/join", "/api/v1/users/login").permitAll() // join, login은 언제나 가능하도록
.antMatchers(HttpMethod.POST,"/api/v1/**").authenticated() // /api/v1/** 으로 넘어오는 post 요청들에 대해 인증요청. 순서대로 넘어오기 때문에 위에서 막히면 다 막혀버림. 순서 잘 고려해서 작성.
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.build();
}
}
API 호출 테스트
.antMatchers().permitAll을 해준 "api/v1/user/login" api가 다시 "token"을 반환하게 되었습니다.
반응형
'회고록 > Archive' 카테고리의 다른 글
[Spring Security & JWT] 3. Token Filter 계층 추가 및 권한 부여 (0) | 2022.12.06 |
---|---|
[Spring Security & JWT] 2. JWT(Json Web Token) 발급 (0) | 2022.12.06 |
retrospect: 멋쟁이 사자처럼 백앤드 스쿨 2022.11.16 회고 (0) | 2022.12.04 |
retrospect: 멋쟁이 사자처럼 백앤드 스쿨 2022.11.01 회고 (1) | 2022.12.02 |
retrospect: 멋쟁이 사자처럼 백앤드 스쿨 2022.10.18 회고 (0) | 2022.12.02 |