Spring Security를 도입하기로 결정했어요!
Filter와 Argument Resolver를 사용하던 코드들을 Spring Security로 변경해주세요.Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security는 강력하고 고도로 사용자 정의 가능한 인증 및 액세스 제어 프레임워크입니다. Spring 기반 애플리케이션을 보호하기 위한 사실상의 표준입니다.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements
Spring Security는 Java 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크입니다. 모든 Spring 프로젝트와 마찬가지로 Spring Security의 진정한 힘은 사용자 정의 요구 사항을 충족하도록 얼마나 쉽게 확장할 수 있는지에 있습니다.
자세한 구조는 아무리 강의나 문서를 봐도 이해가 잘 되지 않았기 때문에.. 대충 인증 인가와 관련한 거구나~ 하고 넘어가겠다. 직접 해봐야지..

위의 overview에서 시키는 대로 servlet을 누르면
Getting Started <<<요 hello spring security 페이지가 나온다.
maven 또는 Gradle 중에서 선택하면 되는데, 나는 gradle이니까 build.gradle에 다음의 의존성을 추가해주었다.
dependencies {
implementation "org.springframework.boot:spring-boot-starter-security"
}
공식문서에는 아래에 BOM을 사용하여 버전을 관리할 수 있는 코드도 제공하고 있는데, 기본적으로 Spring boot가 버전 관리를 해주기 때문에 굳이 사용할 필요는 없다.
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurityConfig {
private final JwtRequestFilter jwtRequestFilter;
@Slf4j
@Component
@RequiredArgsConstructor
public class JwtRequestFilter extends OncePerRequestFilter {
private final JwtUtil jwtUtil;
public Long extractUserId(String token) {
Claims claims = extractClaims(token); //jwt 파싱
String subject = claims.getSubject();
return Long.parseLong(subject); //long -> userId로 변환
}
public CommentSaveResponse saveComment(Principal principal, long todoId, CommentSaveRequest commentSaveRequest) {
Long userId = Long.valueOf(principal.getName()); // 회원 id 가공
User user = userRepository.findById(userId)
.orElseThrow(() -> new InvalidRequestException("User not found"));
오류 메세지:
java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "filter" is null
private JwtRequestFilter jwtRequestFilter;
private final JwtRequestFilter jwtRequestFilter;