【发布时间】:2015-06-06 11:27:21
【问题描述】:
使用 BalusC 实现 shiro 到 JSF 应用程序的教程 http://balusc.blogspot.fi/2013/01/apache-shiro-is-it-ready-for-java-ee-6.html
目前我正在尝试在示例之上添加我自己的自定义领域,但我显然遗漏了一些东西。
我有 shiro.ini 如下(主要是从给定的教程中复制的,可能所有都不是必需的):
[main]
user = com.example.filter.AjaxSessionFilter
mockRealm = com.example.realm.MockRealm
authc.loginUrl = /Login.xhtml
user.loginUrl = /Login.xhtml
[users]
admin = password
[urls]
/Login.xhtml = user
/* = user
securityManager.realms = $mockRealm
简而言之我的 MockRealm:
import org.apache.shiro.realm.AuthorizingRealm;
public class MockRealm extends AuthorizingRealm { /* Implement stuff */ }
我在 GlassFish v4.1 上运行它。到目前为止一切正常,直到我尝试添加这个自定义领域。这会导致以下错误:
Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: There is no filter with name '$mockRealm' to apply to chain [securityManager.realms] in the pool of available Filters. Ensure a filter with that name/path has first been registered with the addFilter method(s).
我找不到有关此错误的任何信息,也找不到任何如何正确实现自定义领域的示例。
谁能指出我正确的方向?谢谢。
【问题讨论】:
-
我认为您的 web.xml 中可能有错误
-
web.xml 与 BalusC 的教程相同,它抱怨过滤器,但由于我没有(据说?)添加过滤器,所以我不明白。如果它真的是一个过滤器,我会知道将它添加为 web.xml 中的过滤器。
-
抱歉,我忘记了 shiro 的动态“过滤器创建”。这是在 shiro.ini 中定义的。尝试将最后一行移到 [main] 部分。那是它所属的地方