Apache Shiro配置问题的Web应用程序安全性

时间:2010-07-30 08:52:02

标签: java security web-applications shiro

我决定使用Shiro来保护我的网络应用程序。我使用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>

但错误仍然相同: - /

3 个答案:

答案 0 :(得分:5)

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

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

干杯,

莱斯

(Apache Shiro团队)

答案 1 :(得分:3)

我无法发现任何明显的事情,事情看起来还不错,但ClassNotFoundException表明org.apache.shiro.web.servlet.IniShiroFilter不在类路径上(尽管你的pom依赖项看起来不错,就像我说的那样)。你能检查一下:

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

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

  

只需定义非空[users][roles]部分,就会自动触发org.apache.shiro.realm.text.IniRealm的创建,并在名称为iniRealm的[main]部分中提供该部分。您可以像上面描述的那样配置它。

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

  

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

请参阅文档以获取确切的语法。

答案 2 :(得分:0)

一些教程作为web项目的pom.xml文件定义不合适,例如我的shiro web项目只有在我删除依赖Shiro-core并添加了commons-logging依赖到我的pom.xml文件后才能工作