2

私は Shiro を使用して Web アプリケーションを保護することにしました。Tomcat アプリ サーバー、maven、休止状態、および 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 構成または Realm 定義とは関係ありません。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 ファイルがあれば、それで十分です。

乾杯、

(アパッチシロチーム)

于 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]or[roles]セクションを定義するだけで、自動的に が作成され、 iniRealm という名前org.apache.shiro.realm.text.IniRealmのセクションで使用できるようになります。[main]上記のように、他のオブジェクトと同じように構成できます。

テスト目的で、提案されているように、 [users]セクションでユーザー アカウントの小さな静的セットを定義するだけでよいと思います。

[users] セクションでは、ユーザー アカウントの静的セットを定義できます。これは、ユーザー アカウントの数が非常に少ない環境や、実行時にユーザー アカウントを動的に作成する必要がない環境で主に役立ちます。次に例を示します。

正確な構文については、ドキュメントを参照してください。

于 2010-07-30T09:30:42.823 に答える