Micronaut Framework / авторизован, но не авторизован - PullRequest
0 голосов
/ 08 ноября 2018

Я столкнулся с проблемой в приложении micronaut. Если я хочу посетить '/ index', я должен войти Когда я вошел в систему, страница '/ index' отображается правильно. В этот самый момент, если я хочу посетить «/ периоды / список / мой», я перехожу на 'unauthorized-target-url'

Самое странное, что посещение '/ index' все еще в порядке ... Может ли это быть проблемой конфигурации безопасности?

HomeController.java

@Secured(SecurityRule.IS_ANONYMOUS)
@Controller("/")
public class HomeController {
    @Get("/")
    @View("index")
    @Secured(SecurityRule.IS_AUTHENTICATED)
    Map<String, Object> index(@Nullable Principal principal) {
       ...
    }
}

PeriodController.java

@Controller("/periods")
@Secured(SecurityRule.IS_ANONYMOUS)
public class PeriodController {
    @Get("/list/my")
    @View("periods/my")
    @Secured(SecurityRule.IS_AUTHENTICATED)
    Map<String, Object> myPeriods(@Nullable Principal principal) {
        ...
    }
}

application.yml

micronaut:
    application:
        name: ws
    security:
        enabled: true
        endpoints:
            login:
                enabled: true 
            logout:
                enabled: true
                path: '/logout'
        interceptUrlMap:
            -
                pattern: /public/**
                httpMethod: GET
                access:
                    - isAnonymous()
        session:
            enabled: true 
            login-success-target-url: '/'
            login-failure-target-url: '/login/authFailed'
            logout-target-url: '/'
            unauthorized-target-url: '/unauthorized'
            forbidden-target-url: '/forbidden'
    session:
        http:
            cookie: true
            header: false

Журналы

11:47:20.134 [nioEventLoopGroup-1-4] DEBUG i.m.h.server.netty.NettyHttpServer - Server localhost:8080 Received Request: GET /periods/list/my
11:47:20.134 [nioEventLoopGroup-1-4] DEBUG i.m.h.s.netty.RoutingInBoundHandler - Matching route GET - /periods/list/my
11:47:20.134 [nioEventLoopGroup-1-4] DEBUG i.m.h.s.netty.RoutingInBoundHandler - Matched route GET - /periods/list/my to controller class com.gvhr.controllers.PeriodController
11:47:20.135 [pool-1-thread-4] DEBUG i.m.s.t.reader.HttpHeaderTokenReader - Looking for bearer token in Authorization header
11:47:20.135 [pool-1-thread-4] DEBUG i.m.s.t.TokenAuthenticationFetcher - Unauthenticated request GET, /periods/list/my, no token found.
11:47:20.135 [pool-1-thread-4] DEBUG i.m.security.filters.SecurityFilter - Failure to authenticate request. GET /periods/list/my.
11:47:20.135 [pool-1-thread-4] DEBUG i.m.security.filters.SecurityFilter - Unauthorized request GET /periods/list/my. The rule provider io.micronaut.security.rules.SecuredAnnotationRule rejected the request.
11:47:20.149 [nioEventLoopGroup-1-5] DEBUG i.m.h.server.netty.NettyHttpServer - Server localhost:8080 Received Request: GET /unauthorized
11:47:20.149 [nioEventLoopGroup-1-5] DEBUG i.m.h.s.netty.RoutingInBoundHandler - Matching route GET - /unauthorized
11:47:20.149 [nioEventLoopGroup-1-5] DEBUG i.m.h.s.netty.RoutingInBoundHandler - Matched route GET - /unauthorized to controller class com.gvhr.controllers.HomeController

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Исправлена ​​ошибка в версии Micronaut 1.1.1

0 голосов
/ 11 ноября 2018

Я не знаю, является ли это основной причиной вашей проблемы, но у меня были похожие симптомы. Использование куки было непредсказуемым. Иногда cookie может работать на пути, а затем - на другом. Очень случайно.

Я обнаружил проблему: каждая страница / путь отправляла файл cookie с другим путем. Это означает, что на страницах «/» и «/ test» были cookie. При повторном посещении страниц браузер отправляет один файл cookie для страницы «/», но два файла cookie для «/test».

Исправьте, в вашем application.yml , убедитесь, что cookiePath установлен:

micronaut:
  session:
    http:
      cookiePath: /

Это заставляет только один файл cookie СЕССИИ для всего сервера.

Я, вероятно, обновлю это при регистрации запроса на изменение.

Я также заменил (@Replaces) два бина Micronaut: SessionSecurityfilterRejectionHandler и SessionLoginHandler для поддержки автоматического перенаправления на исходную страницу после входа в систему.

У меня такое ощущение, что Micronaut еще не сфокусирован на взаимодействии HTML / пользователя:).

...