• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Spring 게시판 jwt 회원기능3(Filter) - Cannot invoke "Object.toString()" 에러

jwt 회원기능3(Filter) - Cannot invoke "Object.toString()" 에러

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #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 "마이페이지 데이터";
    }
    
    
    
    #136775

    codingapple
    키 마스터
    ahtorities=일반유저 
    보니까 jwt 만들어주는 부분에 오타가 있을수도요
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠