inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트 시큐리티 & JWT 강의

jwt를통해 로그인을할때 User가 null값이 되어오류납니다

1067

morrison

작성한 질문수 3

0

java.lang.NullPointerException: Cannot invoke

"filesource.project16.model.SiteUser.getPassword()" because "this.siteUser" is null

at filesource.project16.auth.PrincipalDetails.getPassword(PrincipalDetails.java:24) ~[main/:na]

 

로그인할때 db에있는 올바른 username, password를 입력하였는데 이런 오류가 뜨네요.

 

jwt의 토큰을 거치면서 username, password 정보가 null값이 되어버리는거 같은데,

보통 어디에 문제가있어서 이러는걸까요?

 

auth, jwt 폴더의 파일은 수정하지않고 원본그대로 썼습니다.

 

 

 

@EnableWebSecurity  //모든 요청URL이 스프링 시큐리티의 제어를 받도록함.    기본 스프링 필터체인에 등록
@Configuration
public class SecurityConfig {

    @Autowired
    private CorsConfig corsConfig;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public SecurityFilterChain configure(HttpSecurity http) throws Exception {



        AuthenticationManagerBuilder sharedObject = http.getSharedObject(AuthenticationManagerBuilder.class);
        sharedObject.userDetailsService(userDetailsService);
        AuthenticationManager authenticationManager = sharedObject.build();

        http.authenticationManager(authenticationManager);



        http
                .csrf(csrf -> csrf.disable())
                .httpBasic(basic -> basic.disable())
                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))


                .addFilter(corsConfig.corsFilter())     // cors 허용 설정

                .addFilter(new JwtAuthenticationFilter(authenticationManager))
                .addFilter(new JwtAuthorizationFilter(authenticationManager, userRepository))



                .authorizeHttpRequests(requests -> requests
                                .requestMatchers("/**").permitAll()     //비로그인 접근가능페이지

                                .anyRequest().authenticated()       //이상제외는 로그인필수
                )

                .formLogin(form -> form
                        .loginPage("/login")           //자동적으로 로그인페이지로감. 로그인페이지로 취급될주소
                        .defaultSuccessUrl("/main", true)   //로그인 성공시 루트 url
                        .permitAll()
                )
                .logout(logout -> logout.permitAll());


        return http.build();
    }

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }


}

 

spring spring-security jwt

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

NullPointerException이 발생하는 경우는 주로 참조하려는 객체가 null로 초기화되어 있거나 아직 적절히 생성되지 않았을 때입니다. 문제가 발생한 PrincipalDetails 클래스 내에서 this.siteUser 객체가 null인 상태로 메서드가 호출되어 오류가 발생한 것으로 보입니다.

제공해주신 코드에는 UserDetailsService를 사용하여 사용자 정보를 가져오는 부분이 포함되어 있지만, PrincipalDetails으로 사용자 정보를 불러오는 구체적인 코드는 포함되어 있지 않습니다. 다만, 여기에서 문제가 발생하였다는 것은 사용자 정보를 불러오는 과정에서 예상치 못한 문제가 있을 가능성이 있습니다.

해결을 위해 다음 단계를 확인해보시면 좋을 것 같습니다:

  1. UserDetailsService의 구현부를 살펴봅니다. loadUserByUsername 메서드가 올바르게 구현되었는지, 특히 데이터베이스에서 사용자 정보를 정상적으로 조회하여 UserDetails 객체를 반환하는지 확인이 필요합니다.

  2. JwtAuthenticationFilter에서 AuthenticationManager를 통해 로그인 처리를 할 때 PrincipalDetails가 정상적으로 생성되고, 사용자 정보(siteUser)를 포함하고 있는지 확인합니다.

  3. 문제의 원인이 되는 PrincipalDetails.getPassword() 메서드 호출 부분에서, 해당 메서드가 호출되기 전에 PrincipalDetails 객체의 siteUser 가 정상적으로 초기화되었는가를 검토합니다.

  4. 데이터베이스 연결 상태나, 사용자 정보 조회 쿼리가 정상적으로 작동하는지 확인합니다.

  5. 오류가 발생하는 시점의 로그 또는 스택 트레이스를 상세히 분석합니다.

PrincipalDetails 클래스와 해당 클래스를 사용하는 필터들의 정확한 구현 코드를 검토하지 않고는 구체적인 해결책을 제시하기 어렵습니다. 그러나 위에서 제시한 단계를 통해 문제점을 찾아보시는 것을 추천드립니다. 필요한 경우, AuthenticationManager 혹은 UserDetailsService가 정상적으로 빈으로 등록되었는지도 확인해보세요.

JWT를 구현한 다음 이 API를 호출해서 사용하는 것은 프론트엔드 쪽에서 하는 역할인가요?

0

98

1

Jwt쓰면 스프링시큐리티는 필수적으로 사용해야하나요?

0

401

1

13:23 system.out 출력문이 다르게 나옵니다.

0

130

1

수료증 문의

0

227

2

9분대에 질문이 있습니다 !

0

115

1

password 비교를 하지 않았는데 어떻게 인증이 통과된 건가요?

0

321

1

이전 강의 참고하라는 말씀

0

253

1

강의 실습하다가 막히는 분들 참고(2024년8월 기준)

2

1116

2

구글 소셜 로그인 302

0

201

1

오류 문의 _ org.springframework.orm.jpa.JpaSystemException: could not deserialize

1

584

1

[자바] 시큐리티 Config 참고

13

953

1

이론강의

0

280

1

SpringSecurity JWT 로그인 URL 2개 설정하는 방법

0

488

1

2024.06기준) 최근 SecurityConfig 설정 문의

0

922

3

구글 로그인시 authentication이 null 값이라고 에러가 발생합니다.

0

678

2

특정 url필터 거는 방법 이슈

0

422

1

강사님께서 말씀하시는 시큐리티세션이 SecurityContext인가요?

0

279

1

25강 마지막 테스트에서 오류

1

1044

2

jwt를 저장하는 위치에 궁금한 점이 있습니다.

0

298

1

mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데

0

697

1

세션 인증방식이 REST 원칙에 위배되는 건가요?

0

342

1

jwt와 실제데이터의 관계

1

245

1

jwt 와 세션ID의 관계

1

313

1

SecurityConfig에서 세션 설정, 인가 설정

0

422

1