일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 썸머노트
- 세션
- 자바왕초보
- CSS
- 자바 기초
- 오라클월별데이터
- 오라클
- java
- 자바
- 스프링 구글차트
- 스프링 에러
- 스프링 Ioc
- 자바왕기초
- 자바 왕기초
- 오라클주별데이터
- 스프링 구글차트로 기간별 현황 조회하기
- 스프링
- 오라클일별데이터
- 스프링 Ioc Container
- 오라클통계
- HTML
- Spring Boot가 해결하려고 했던 문제
- 스프링 제어역전
- 스프링과 스프링부트 차이점
- 오라클클라우드에 젠킨스 설치하기
- jsp
- maven
- 자바기초
- 스프링 부트가 해결하려고 했던 문제
- 제이쿼리
- Today
- Total
Just Do it
[STS/스프링] 스프링 시큐리티 getPassword() is null 본문
[STS/스프링] 스프링 시큐리티 getPassword() is null
Seojoo21 2022. 3. 18. 15:41개인프로젝트인 SJBoard의 회원 탈퇴 기능을 만들던 중 아래 오류를 만났다.
3월 18, 2022 3:12:59 오후 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: 경로 []의 컨텍스트 내의 서블릿 [appServlet]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "loginUserPw" is null]을(를) 발생시켰습니다.
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "loginUserPw" is null
회원 탈퇴 처리를 담당하는 컨트롤러 내 코드는 아래와 같았다.
Principal & Authentication 객체를 이용하여 현재 로그인한 사용자의 비밀번호를 가져온 다음 사용자가 회원 탈퇴 페이지에서 입력한 비밀번호와 일치할 시 회원 탈퇴를 할 수 있도록 만들고 있었다.
그런데 현재 로그인한 사용자의 비밀번호를 가져오는 코드(빨간색 밑줄 표시한 getPassword())에서 비밀번호가 반환되지 않고 null값이 반환되어 오류가 발생한 것으로 보였다.
구글링을 하다가 아래 블로그 글을 보았는데, 확인해보니 User class 내부의 eraseCredentials 함수가 호출되어 getPassword()를 실행해도 null이 return되는 것이었다.
[security] getPassword() is null
[코드로 배우는 스프링부트] - 구멍가게 코딩단 기준 plugins { id 'org.springframework.boot' version '2.4.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'com.adarshr.test-logger' v..
java8.tistory.com
실제 STS에서 User 클래스를 열어보니 eraseCredentials() 내 password가 null 로 되어있었다.
기본값이 true 이므로, 이 null 값이 나오지 않게 하려면 아래와 같이 security-context.xml 내 authentication-manager 태그를 수정하면 된다고 하여 현재 프로젝트 내 security-context.xml의 코드를 수정했다.
<security:authentication-manager erase-credentials="false">
그러고나서 브라우저에서 다시 회원 탈퇴 테스트를 해보았더니 더이상 에러도 발생하지 않고 콘솔창에도 현재 로그인 사용자의 비밀번호가 더이상 null이 아닌 Bcrypt된 비밀번호로 잘 나오는 것을 확인할 수 있었다.