【问题标题】:Error when trying to use custom realm for Shiro尝试为 Shiro 使用自定义领域时出错
【发布时间】: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] 部分。那是它所属的地方

标签: jsf-2 shiro


【解决方案1】:

嗯,这种情况经常发生(令人讨厌)。
睡了一觉后,我意识到 securityManager.realms = $mockRealm 可能位于 shiro.ini 的错误部分。
将它移到 [main] 下,它起作用了。
有时你只需要暂时忘记一些事情才能重新审视它们。

【讨论】:

  • 抱歉,这次不行。它在配置中,但在 shiro.ini 中。
  • @Kukeltje 审查了这个以接受答案,没有注意到你的后评论。你是对的。此外,如您所见,我在您发表评论前 12 分钟添加了我的答案。 :)
  • 没问题...没什么好争论的。只是想知道您如何在我上面的评论前 12 分钟看到您的答案……(在问题下方)
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 2012-09-17
  • 1970-01-01
  • 2016-03-12
  • 2012-11-01
  • 2018-04-03
  • 2012-03-01
  • 1970-01-01
相关资源
最近更新 更多