Java Apache Shiro配置问题导致的Web应用程序安全

Java Apache Shiro配置问题导致的Web应用程序安全,java,security,web-applications,shiro,Java,Security,Web Applications,Shiro,我决定使用Shiro来保护我的Web应用程序。我使用tomcat应用服务器、maven、hibernate和jsf。现在我试图配置Shiro,但遇到了一些问题 这是我的档案: ---POM.xml--- org.apache.shiro 西罗岩芯 1.0.0-孵化 org.apache.shiro 西罗网 1.0.0-孵化 org.apache.shiro shiro aspectj 1.0.0-孵化 ---web.xml--- Facesservlet javax.faces.webap

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

这是我的档案:

---POM.xml---


org.apache.shiro
西罗岩芯
1.0.0-孵化
org.apache.shiro
西罗网
1.0.0-孵化
org.apache.shiro
shiro aspectj
1.0.0-孵化
---web.xml---


Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.xhtml
welcome.xhtml
安全过滤器
org.apache.shiro.web.servlet.IniShiroFilter
配置
[主要]
myrealm=com.misPartidos.web.myrealm
安全过滤器
/*
如果部署到服务器,则会收到以下错误消息:

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
错误:启动筛选器ShiroFilter时出现异常
java.lang.ClassNotFoundException:org.apache.shiro.web.servlet.IniShiroFilter
位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
位于org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)
位于org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
位于org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:115)
位于org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
位于org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
位于org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
位于org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
位于org.apache.catalina.core.StandardService.start(StandardService.java:519)
位于org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
位于org.apache.catalina.startup.catalina.start(catalina.java:581)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
30.07.2010 10:14:34 org.apache.catalina.core.StandardContext开始
错误:错误筛选器开始
我的错在哪里?我还需要执行其他操作吗? 谢谢你的帮助 斯文


附加的 我考虑了一下这个问题。我想关键是要设定境界。但是为了测试这个框架,我不想添加数据库或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>

配置
[主要]
[用户]
汤姆=机密,管理员
保罗=秘密,用户
[角色]
管理员=*
用户=*

但是错误仍然是一样的:-/

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

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

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

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

出于测试目的,我认为您只需在本节中定义一组小的静态用户帐户,如下所示:

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


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

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

另外,在项目的web模块中,运行“mvn安装”。然后查看“target”目录,您应该会看到build.war文件。在命令行上,运行“jar tf my war file.war”。只要在/web-INF/lib中看到shiro-web-1.0.0-incubating.jar文件,这就是所需的全部内容

干杯

莱斯


(ApacheShiro团队)

一些教程作为web项目的pom.xml文件定义不充分,例如,我与Shiro的web项目只有在我删除依赖项Shiro core并将commons日志依赖项添加到pom.xml文件后才起作用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
<init-param>
    <param-name>config</param-name>
        <param-value>

        [main]

        [users]

        tom = secret, admin
        paul = secret, user

        [roles]

        admin = *
        user = *

         </param-value>

    </init-param>