원래 연휴라 개발은 안하기로 했는데 제가 할 분량을 끝내지 못 해서 이것만 해결했습니다!!!!
200이란 숫자가 이렇게 반갑다니..........성공했습니다!!!!!!! 이거 때문에 진짜 며칠을.... 고생했네요
401은 코드 안에서 임의로 설정해 놓은 것이라서 실제 토큰의 유효성이나 값의 오류가 있는 것은 아니었고 변수명 설정이랑 ROLE_접두사 문제 때문에 나는 것이었습니다!!
계속 401에러만 나고 인텔리제이에서는 에러가 나지 않아서 골 아팠는데 SecurityConfig 코드를 좀 수정했더니 인텔리제이에 에러코드가 떴어요.
2023-10-03 01:31:41.452 ERROR 2024 --- [nio-8080-exec-9] c.m.m.config.secutiry.JwtTokenProvider : [validateToken] 토큰 유효 체크 예외 발생: The verification key's size is 72 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS256 MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size). Consider using the io.jsonwebtoken.security.Keys class's 'secretKeyFor(SignatureAlgorithm.HS256)' method to create a key guaranteed to be secure enough for HS256. See https://tools.ietf.org/html/rfc7518#section-3.2 for more information. 2023-10-03 01:31:41.453 INFO 2024 --- [nio-8080-exec-9] c.m.m.c.s.CustomAuthenticationEntryPoint : [commence] 인증 실패로 response.sendError 발생
처음엔 이런 에러가 났는데 저는 키를 HS256으로 설정했었거든요... GPT에게 질문하며 키를 생성하는 코드를 수정했더니 사용자를 찾을 수 없다는 에러가 났고 그 에러를 읽으니 변수명 문제라는 것을 파악했어요. 아이디의 변수명을 account라고 설정해놨었는데 토큰값으로 유저네임을 찾는 코드에서 변수명이 username이라고 되어 있었고, 접근 권한 설정하는데서 ROLE_접두사가 자동 생성되는걸 놓치고 ROLE_을 임의로 작성해놨었어요...(ex)ROLE_ADMIN)그리고 UserDetailService코드에서 객체를 생성하여 Spring Security에 반환할 때에 .roles를 .authorities로 바꾸니 오류가 해결 되었습니다!!!!
2023-10-03 02:15:38.145 ERROR 20168 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception java.lang.IllegalArgumentException: ROLE_ADMIN cannot start with ROLE_ (it is automatically added) at org.springframework.util.Assert.isTrue(Assert.java:139) ~[spring-core-5.3.12.jar:5.3.12]
// UserDetails 객체를 생성하여 Spring Security에 반환
return org.springframework.security.core.userdetails.User.builder()
.username(user.getAccount()) // 여기에 사용자 이름 또는 이메일을 설정해야 합니다.
.password(user.getPassword()) // 비밀번호는 암호화되어 저장되어야 합니다.
.authorities(user.getRoles().toArray(new String[0])) // 사용자의 권한을 설정
.build();
}
코드를 이렇게 수정했습니다. 저기 authorities부분!!
'이수아' 카테고리의 다른 글
[개별 스크럼]10. 31(화) 검색기능, 단위테스트공부 (1) | 2023.11.01 |
---|---|
[개별 스크럼]10. 05(목) CI/CD 배포 자동화 공부 + AWS 계정생성 (1) | 2023.10.06 |
[개별 스크럼]09. 27(수)JWT토큰 인증과 권한 설정 (0) | 2023.10.03 |
[개별 스크럼]09. 26(화) 이메일 인증과 유저 테이블 추가, 권한 수정 (0) | 2023.09.26 |
[개별 스크럼]09. 25(월) 진행상황 (0) | 2023.09.26 |