使用shiro

时间:2018-07-29 14:31:12

标签: java authentication java-ee shiro

我使用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将不会对用户进行身份验证。我以为,将评估链中的下一个过滤器,但这不会发生!

在测试方案中,isAccessAllowed()的{​​{1}}和onAccessDenied()方法都返回myAuthc

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

是否可以合并这样的过滤器?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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