스프링부트에서 Environment 프로퍼티 NullPointerException
1054
아래 코드와 같이 컨트롤러에서 Environment로 yaml의 프로퍼티 값을 꺼내서 사용하고 있었는데
@Slf4j
@RestController
@RequestMapping("/users")
public class RefreshAccessToken {
@Autowired
UsersService usersService;
Environment env;
public RefreshAccessToken(Environment env) {
this.env = env;
}
@PostMapping("/refreshAccessToken")
private ResponseEntity<?> getRefreshAccessToken(HttpServletRequest request, HttpServletResponse response) {
// 요청 헤더에서 refresh token 읽기
String authorizationHeader = request.getHeader("refreshToken");
if (authorizationHeader == null || !authorizationHeader.startsWith(env.getProperty("authorization.token.header.prefix"))) {
log.warn("RefreshToken validation error #1 : refreshToken header isn't exists");
throw new CustomApiException("refreshToken header isn't exists");
}
...
}
...
}env에서 NullPointerException이 발생하더라구요...
UsersService와 Enviroment 모두 롬복 생성자 주입해도 안되고, @Value를 사용해보기도 했는데 역시 프로퍼티 값을 못가져왔습니다.
yaml은 application.yml에서 각 서버의 profile을 잡도록 해서 사용 중이고, 모든 서버의 profile에 해당 프로퍼티 키, 밸류가 있습니다. 프로퍼티 키 오타도 없구요.
env가 계속 원인을 알 수 없는 null이어서 결국 해당 컨트롤러를 삭제하고 새로 컨트롤러를 만들어봤더니 이번엔 이상없이 env 값이 잘 들어옵니다.😇
아래 새로 만든 컨트롤러 코드엔 롬복 생성자 주입을 사용하고 있는데 혹시나 이게 원인인가 싶어 @Autowired로 필드 주입이랑 수동 생성자 주입 모두 해봤는데 아무런 문제가 없었습니다. 심지어 NPE가 발생했던 코드와 똑같이 짜봤는데 오류가 안생기더라구요.
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/users")
@RestController
public class RefreshTokenController {
private final Environment env;
private final IUsersService usersService;
@PostMapping("/refreshAccessToken")
public ResponseEntity<?> getAccessTokenByRefreshToken(HttpServletRequest request, HttpServletResponse response) {
String secret = env.getProperty("token.secret");
String prefix = env.getProperty("authorization.token.header.prefix");
String expiration = env.getProperty("token.access_expiration_time");
// 토큰 읽어오기
String authorizationHeader = request.getHeader("refreshToken");
if (authorizationHeader == null || !authorizationHeader.startsWith(prefix)) {
log.warn("RefreshToken validation error #1 : refreshToken header isn't exists");
throw new CustomApiException("refreshToken header isn't exists");
}
...
}
...
}
현재로선 Environment 초기화 시점이 꼬여서 null인게 가장 의심이 되긴는데 정확한 오류의 원인을 모르겠어서 질문드립니다.
답변 0
백엔드 개발자로 취업을 하기위한 지금 공부해야할 것은?
0
337
0
스프링 백엔드 개발 로드맵
0
441
1
'스프링 완전 정복' 로드맵을 함께 위한 Java 지식의 정도
1
396
1
백엔드 독학 시 취업 준비(포트폴리오) 및 공부 방향이 궁금합니다.
1
1186
1
부하테스트는 배포 환경에서 하려면 어떻게 해냐하나요?
0
1314
1
백엔드 개발자의 방향성에 대해 조언을 얻고자 합니다
3
5654
1
진짜 강의 구매하길 잘했다는 생각이 너무 듭니다 🥹
0
640
2
springboot로 API 다루는 강의 추천해주세요.
0
472
0
그냥 spring boot쓰는게 나을 듯.
0
784
1
로그 파일과 관련하여 궁금한 것이 있어요🤔
0
602
2





