자바 11 -> 17업그레이드와 스프링시큐리티 5버전에서 6버전에서 업그레이드 하고나서 발생한 error와 warning을 수정한 과정이다.
업그레이드 하고 나서 security 설정 부분에서 에러가 발생하여 에러를 수정하였다.
SecurityConfiguration 수정
cors() 메서드 들어가서 documentation에 들어가서 삭제된 이유를 확인해보니 공식문서에 아래와 같은 이유가 있었다.
단순하게 이해해서 이전 방식(메서드 체이닝)이 가독성이 안좋기도 하고 람다 방식과 메서드 체이닝 방식 같이 사용하기 때문에 혼란을 야기한다는 뜻 같았다. 그래서 메서드 체이닝 방식을 완전히 삭제 한 것 같다.
그래서 아래처럼 메서드 체이닝 방식을 모두 람다식으로 수정하였다.
그리고 cors.disable(), csrf.disable(), httpBasic.disable(), formLogin.disbale() warning을 수정하면 아래와 같이 된다. 메서드 레퍼런스를 사용하라는 warning 이였다
JWT Builder수정
Jwt 빌더에서 에러는 아니지만 set함수들에서 Warning이 있었다. 함수를 타고 들어가보니 @Deprecated가 있었다 이 어노테이션은 더 이상 사용되지 않거나 앞으로 제거될 예정이라는 뜻이다.
수정 방법은 공식문서 확인해서 수정하였다. 1.0 릴리즈 이전에는 삭제 된다고 나온다. deprecated된 이유는 공식문서에 나와있진 않지만 set함수는 아무래도 보안적인 이슈가 생길 수 있다보니 보안강화를 위해 삭제를 하는 것 같다.
위 공식문서를 참고하여 수정한 코드이다.
그리고 Header.TYPE과 Header.JWT_TYPE 이 deprecated 된다. 대신에 getType()을 이용하라고 하는데 어떻게 수정해야 할지 몰라서 stackoverflow를 참고하였다.
https://stackoverflow.com/questions/54255938/how-to-set-jwt-type-in-jwt-header
아래처럼 header를 Jwts.header()를 만들고 .add() 안에 넣으면 된다. 그러면 기존과 동일하게 "typ" : "JWT" 키 밸류 Map형태로 인입이 된다.
그리고 .signWith(SignatureAlgorithm.HS256, secretKey) 도 warning이 뜨는데 .signWith(secretKey) 로 고쳐야 된다. 구조를 단순화 하기 위함이다.
Jwts 빌더를 모두 수정하고 테스트코드도 문제없이 모두 성공하였다.
그리고 Jwts 파서 부분도 warning이 있는데 의미와 목적을 명확히 하기 위해서 이름이 변경된것이였다. 모두 문서를 참고하여 이름을 수정하였다.
JWT Parser수정
setSigningKey()는 verifyWith()로 바뀌었고 parseClaimsJwt()는 parseSignedClaims()로 바뀌고 getBody()는 getPayload()로 변경되었다.
참고
- https://docs.spring.io/spring-security/reference/migration-7/configuration.html#_use_the_lambda_dsl
- https://javadoc.io/doc/io.jsonwebtoken/jjwt-api/latest/io/jsonwebtoken/Header.html
- https://stackoverflow.com/questions/54255938/how-to-set-jwt-type-in-jwt-header
'Project > B2C-Side-Project(second)' 카테고리의 다른 글
[SpringBoot] 스프링 시큐리티 활용한 회원가입 이메일 인증 방법(개선전) (0) | 2024.06.29 |
---|---|
[SpringBoot] Github Actions 이용한 AWS EC2(ubuntu)에 자동배포와 디스코드 알림 설정 서버다운 해결 (0) | 2024.06.11 |
[SpringBoot] GlobalException 활용한 파라미터 유효성 검증 리팩토링 (0) | 2024.06.10 |
[프로젝트] DIP 지켜가며 기존 MyBatis기능에서 JPA기능으로 변경하기 (0) | 2024.06.09 |
[Github] 깃허브에서 애자일 방식 프로젝트 문서 관리 방법 (0) | 2024.06.05 |