Вы должны настроить:
micronaut:
application:
name: ws
security:
enabled: true
endpoints:
login:
enabled: true
logout:
enabled: true
session:
enabled: true
login-success-target-url: '/'
login-failure-target-url: '/login/authFailed'
logout-targetUrl: '/link1'
unauthorized-target-url: '/link2'
forbidden-targetUrl: '/link3'
Заметка вместо micronaut.security.session.unauthorizedTargetUrl
использование:
micronaut.security.session.unauthorized-target-url
Используется в этом bean-компоненте:
https://github.com/micronaut-projects/micronaut-core/blob/master/security-session/src/main/java/io/micronaut/security/session/SessionSecurityfilterRejectionHandler.java
Я только что проверил с Safari, и кажется, что браузер может не отправлять заголовок типа контента, вам нужно проверить заголовок Accept.
Это было исправлено для 1.0.1 .А пока можно заменить боб
@Singleton
@Replaces(SessionSecurityfilterRejectionHandler.class)
public class CustomSessionSecurityfilterRejectionHandler extends SessionSecurityfilterRejectionHandler {
public CustomSessionSecurityfilterRejectionHandler(SecuritySessionConfiguration securitySessionConfiguration) {
super(securitySessionConfiguration);
}
@Override
public Publisher<MutableHttpResponse<?>> reject(HttpRequest<?> request, boolean forbidden) {
if (request.getHeaders().accept().stream().anyMatch(mediaType -> mediaType.equals(MediaType.TEXT_HTML_TYPE))) {
try {
String uri = forbidden ? securitySessionConfiguration.getForbiddenTargetUrl() :
securitySessionConfiguration.getUnauthorizedTargetUrl();
if (uri == null) {
uri = "/";
}
URI location = new URI(uri);
return Publishers.just(HttpResponse.seeOther(location));
} catch (URISyntaxException e) {
return Publishers.just(HttpResponse.serverError());
}
}
return Publishers.just(HttpResponse.status(forbidden ? HttpStatus.FORBIDDEN : HttpStatus.UNAUTHORIZED));
}
}