我使用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
资源的信息。
是否可以合并这样的过滤器?
答案 0 :(得分:0)
为了进行记录,onAccessDenied()
应该返回true
,以使过滤器链继续。
答案 1 :(得分:0)
看看permissive
选项:https://shiro.apache.org/spring-boot.html#annotations-and-web-applications
所以您的 config 看起来像这样:
/web/** = myAuthc[permissive], authcBasic
当然,这取决于您实际的MyAuthcFilter
在做什么。