【问题标题】:Multiple authentication filters with shiro使用 shiro 的多个身份验证过滤器
【发布时间】:2019-01-05 23:00:01
【问题描述】:

我使用 shiro 实现了自定义身份验证过滤器,但想使用基本身份验证作为备用选项。这意味着 - 如果用户拥有我的自定义过滤器的正确凭据,他将登录。如果没有,我想检查用户是否提供了基本的 authc 标头。

这是我的shiro.ini

[main]
myAuthc = com.company.security.MyAuthcFilter
myRealm = com.company.security.MyAuthcRealm
myRealm.authenticationTokenClass = com.company.security.MyAuthcToken
securityManager.realms = $myRealm

# user for the basic authc filter
[users]
testuser = testpass

[urls]
/web/** = myAuthc, authcBasic

问题是myAuthc 被评估,authcBasic 没有! 在我的测试用例中,客户端仅提供基本身份验证标头,这意味着myAuthc 不会对用户进行身份验证。我认为,将评估链中的下一个过滤器,但这不会发生!

在测试场景中,myAuthcisAccessAllowed()onAccessDenied() 方法都返回false

顺便说一句,当我请求 /web/hello 时,我实际上收到了 HTTP 200,但响应正文为空 - 没有来自 hello 资源的信息。

可以这样组合过滤器吗?

【问题讨论】:

    标签: java authentication jakarta-ee shiro


    【解决方案1】:

    看看permissive选项:https://shiro.apache.org/spring-boot.html#annotations-and-web-applications

    所以你的 config 看起来像这样:

    /web/** = myAuthc[permissive], authcBasic

    当然,这取决于您的实际 MyAuthcFilter 正在做什么。

    【讨论】:

      【解决方案2】:

      作为记录,onAccessDenied() 应该返回 true 以使过滤器链继续。

      【讨论】:

        猜你喜欢
        • 2013-12-29
        • 2014-12-20
        • 2013-08-31
        • 2014-12-15
        • 2014-08-31
        • 2014-08-28
        • 2017-06-28
        • 2022-01-20
        • 2017-04-08
        相关资源
        最近更新 更多