2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2025년 3월 5일 19:30 #136773
포닥참가자이전까지의 모든 실습은 잘 됐구요. jwt마이페이지 버튼을 누르면 Cannot invoke "Object.toString()" because the return value of "io.jsonwebtoken.Claims.get(Object)" is null 에러가 뜨는데, var arr = claim.get("authorities").toString().split(","); << 이 구문이 문제라고합니다. 그래서 sout로 출력을 해보면 System.out.println("*******"+claim+"*******"); System.out.println("*******"+ claim.get("authorities")+"*******"); *******{username=park, displayName=회원1, ahtorities=일반유저, iat=1741170251, exp=1741170261}******* *******null******* claim에 들어간 것들은 잘 나오는데, claim.get("authorities")가 null이 나옵니다. 어디서 어떻게 잘못된건지 감이 안잡힙니다ㅠ ----------SecurityConfing------------------------
public class SecurityConfig {
@Bean PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); }
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf((csrf) -> csrf.disable());
http.sessionManagement((session) -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS));
http.addFilterBefore(new JwtFilter(), ExceptionTranslationFilter.class); //필터순서(JwtFilter) http.authorizeHttpRequests((auhorize) -> auhorize.requestMatchers("/**").permitAll() );
http.logout(logout -> logout.logoutUrl("/logout")); //로그아웃
return http.build(); }
} ----------------------JwtFilter---------------------------
@Component public class JwtFilter extends OncePerRequestFilter {
@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { Cookie[] cookies = request.getCookies();
if(cookies == null){ filterChain.doFilter(request, response); //다음필터 실행해주세용 return; } var jwtCookie = ""; for (int i = 0; i < cookies.length; i++){ if (cookies[i].getName().equals("jwt")){ jwtCookie = cookies[i].getValue(); } } System.out.println(jwtCookie);
Claims claim; try { claim = JwtUtil.extractToken(jwtCookie); }catch (Exception e){ filterChain.doFilter(request, response); return; }
System.out.println("*******"+claim+"*******"); System.out.println("*******"+ claim.get("authorities")+"*******"); var arr = claim.get("authorities").toString().split(","); var authorities = Arrays.stream(arr) .map(a -> new SimpleGrantedAuthority(a)).toList();
var customUser = new CustomUser(claim.get("username").toString(), "none", authorities); customUser.displayName = claim.get("displayName").toString();
var authToken = new UsernamePasswordAuthenticationToken( customUser, "", authorities ); authToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authToken);
filterChain.doFilter(request, response); } } ----------------MemberController----------------------- @GetMapping("/my-page/jwt") @ResponseBody String mypageJWT(Authentication auth){ var user = (CustomUser) auth.getPrincipal(); System.out.println(user); System.out.println(user.displayName); System.out.println(user.getAuthorities()); return "마이페이지 데이터"; }
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.