Da die Umleitungen normalerweise auf einem nicht einfachen Weg benötigt werden, halte ich es für meine Lieblingslösung, eine Ausnahme auszulösen und später zu behandeln.
Verwenden eines ControllerAdvice
@ControllerAdvice
public class RestResponseEntityExceptionHandler
extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {
NotLoggedInException.class
})
protected ResponseEntity<Object> handleNotLoggedIn(
final NotLoggedInException ex, final WebRequest request
) {
final String bodyOfResponse = ex.getMessage();
final HttpHeaders headers = new HttpHeaders();
headers.add("Location", ex.getRedirectUri());
return handleExceptionInternal(
ex, bodyOfResponse,
headers, HttpStatus.FOUND, request
);
}
}
Die Ausnahmeklasse in meinem Fall:
@Getter
public class NotLoggedInException extends RuntimeException {
private static final long serialVersionUID = -4900004519786666447L;
String redirectUri;
public NotLoggedInException(final String message, final String uri) {
super(message);
redirectUri = uri;
}
}
Und ich löse es so aus:
if (null == remoteUser)
throw new NotLoggedInException("please log in", LOGIN_URL);