[프로젝트] 스프링시큐리티 5->6, JWT 버전 업그레이드 하고 error와 warning 수정

 

자바 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

댓글

Designed by JB FACTORY