我的micronaut应用程序遇到问题。 如果我要访问“ / index”,则必须登录。 登录后,正确显示“ / index”页面。 此时此刻,如果我想访问“ / periods / list / my”,我会重定向到 “ 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
答案 0 :(得分:1)
我不知道这是否是您问题的根本原因,但是我有类似的症状。 Cookie的使用无法预测。有时,cookie会在一个路径上工作,然后在另一个路径上失败。非常随机。
我发现了问题:每个页面/路径都发送回具有不同路径的cookie。这意味着页面“ /”和“ / test”每个都有一个cookie。当您重新访问页面时,浏览器将为页面“ /”发送一个cookie,但为“ / test”发送两个cookie。
此修复程序在您的 application.yml 中,确保已设置 cookiePath :
micronaut:
session:
http:
cookiePath: /
这会强制整个服务器使用一个SESSION cookie。
当我记录更改请求时,我可能会对此进行更新。
我还替换了(@Replaces)两个Micronaut Bean:SessionSecurityfilterRejectionHandler和SessionLoginHandler,以支持登录后自动重定向到原始页面。
我感到Micronaut尚未专注于HTML /用户交互:)。
答案 1 :(得分:0)
此问题已在Micronaut 1.1.1版中修复