Chciałem zabezpieczyć kilka adresów w REST API, aby były dostępne tylko dla zalogowanych użytkowników. Utworzyłem do tego specjalny incereptor
public class CheckLoginStatus extends HandlerInterceptorAdapter {
@Override
public void postHandle(javax.servlet.http.HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if(SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString().equals("anonymousUser")) {
response.sendRedirect(signIn);
}
}
}
i zarejestrowałem go w konfiguracji
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CheckLoginStatus()).addPathPatterns("/messages/*");
}
Incereptor wywoływany jest dla np. metody
@PostMapping(value = "/sendMessage")
@ApiMethod(description = "Save message")
public HttpEntity<Boolean> sendMessage(
@RequestBody @Valid SendMessageDTO sendMessageDTO
) {
messageService.saveMessage(converterSendMessageDTOToMessage.convert(sendMessageDTO));
return ResponseEntity.ok(true);
}
Jednak podczas wywoływania adresu w konsoli wyrzuca wyjątek
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
Nie jestem pewien czy działają przekierowania w incereptorze użyte dla adresu z REST API.