2

我决定使用 Shiro 来保护我的 web 应用程序。我使用一个 tomcat 应用服务器、maven、hibernate 和 jsf。现在我尝试配置 Shiro,但遇到了一些问题。

这是我的文件:

---POM.xml---

            <dependency>
                    <groupId>org.apache.shiro</groupId>
                    <artifactId>shiro-core</artifactId>
                    <version>1.0.0-incubating</version>
            </dependency>
            <dependency>
                    <groupId>org.apache.shiro</groupId>
                    <artifactId>shiro-web</artifactId>
                    <version>1.0.0-incubating</version>
            </dependency>
            <dependency>
                    <groupId>org.apache.shiro</groupId>
                    <artifactId>shiro-aspectj</artifactId>
                    <version>1.0.0-incubating</version>
            </dependency>

---web.xml---

 <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>
      javax.faces.webapp.FacesServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>welcome.xhtml</welcome-file>
  </welcome-file-list>

  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
    <init-param>
    <param-name>config</param-name>
            <param-value>

                  [main]

                  myrealm = com.misPartidos.web.MyRealm

         </param-value>

    </init-param>
        </filter>

        <filter-mapping>
            <filter-name>SecurityFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

如果我部署到服务器,我会收到以下错误消息:

ERROR: Exception starting filter ShiroFilter
java.lang.ClassNotFoundException: org.apache.shiro.web.servlet.IniShiroFilter
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
        at org.apache.catalina.core.StandardService.start(StandardService.java:519)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
30.07.2010 10:14:34 org.apache.catalina.core.StandardContext start
ERROR: Error filterStart

我的错误在哪里?我还需要实现其他东西吗?谢谢你的帮助斯文


额外的

我想了一下这个问题。我认为关键是设置领域。但是为了测试这个框架,我不想添加数据库或 ldap。我需要一个简单的解决方案...


更新

我将 web.xml 更改如下:

<init-param>
    <param-name>config</param-name>
        <param-value>

        [main]

        [users]

        tom = secret, admin
        paul = secret, user

        [roles]

        admin = *
        user = *

         </param-value>

    </init-param>

但错误保持不变:-/

4

3 回答 3

5

该问题与 INI 配置或您的领域定义无关。这是因为 org.apache.shiro.web.servlet.IniShiroFilter 类不在类路径中。这个类在 shiro-web-1.0.0-incubating.jar 文件中(不需要快照)。确保您的 POM 依赖项正确列出它。

此外,在项目的 Web 模块中,运行“mvn install”。然后查看“目标”目录,您应该会看到构建的 .war 文件。在命令行上,运行“jar tf my-war-file.war”。只要您在 /WEB-INF/lib 中看到 shiro-web-1.0.0-incubating.jar 文件,就可以了。

干杯,

莱斯

(Apache Shiro 团队)

于 2010-07-30T22:18:31.483 回答
2

我没有发现任何明显的东西,看起来还不错,但是仍然ClassNotFoundException表明org.apache.shiro.web.servlet.IniShiroFilter不在类路径上(尽管正如我所说,您的 pom 依赖项看起来不错)。那么你能检查一下吗:

  • shiro-web-1.0.0-incubating.jar在您的战争中按预期打包。
  • 您的版本shiro-web-1.0.0-incubating.jar确实包含该类。

关于您的真实定义,如果您不想提供领域实现,为什么不按照INI 部分的文档中的建议简单地定义一些用户和角色:

只需定义非空[users][roles]部分将自动触发创建org.apache.shiro.realm.text.IniRealm并使其在[main]名为 iniRealm 的部分中可用。您可以像上面描述的任何其他对象一样配置它。

出于测试目的,我认为您应该按照建议在[users]部分中简单地定义一组小的静态用户帐户:

[users] 部分允许您定义一组静态用户帐户。这在用户帐户数量非常少或不需要在运行时动态创建用户帐户的环境中非常有用。这是一个例子:

有关确切的语法,请参阅文档。

于 2010-07-30T09:30:42.823 回答
0

一些教程作为 web 项目的 pom.xml 文件定义不足,例如我的 web 项目与 shiro 仅在我删除依赖项 Shiro-core 并将 commons-logging 依赖项添加到我的 pom.xml 文件后工作

于 2013-04-22T08:11:12.370 回答