Микронавт: Безопасность / Сеанс / Аутентификация - PullRequest
0 голосов
/ 24 октября 2018

Мне нужна помощь ...

Значит ли установка micronaut.security.session.unauthorized-target-url в application.yml означает, что micronaut предназначен для автоматического перенаправления на целевой URL?Пока без эффекта.

https://docs.micronaut.io/1.0.0.RC3/guide/index.html#session

версия микронавта

1.0.0.RC3

application.yml

micronaut:
application:
    name: ws
security:
    enabled: true 
    endpoints:
        login:
            enabled: true 
        logout:
            enabled: true 
    session:
        enabled: true 
        loginSuccessTargetUrl: / 
        loginFailureTargetUrl: /login/authFailed
        logoutTargetUrl: /link1
        unauthorizedTargetUrl: /link2
        forbiddenTargetUrl: /link3

1 Ответ

0 голосов
/ 24 октября 2018

Вы должны настроить:

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));
    }    
}
...