Безопасность веб-приложений с проблемами конфигурации Apache Shiro - PullRequest
2 голосов
/ 30 июля 2010

Я решил использовать Широ для защиты своего веб-приложения.Я использую сервер приложений tomcat, maven, hibernate и jsf.Теперь я попытался настроить Широ, но у меня возникли некоторые проблемы.

Вот мои файлы:

--- 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 ]

5 голосов
/ 31 июля 2010

Проблема не связана с конфигурацией INI или определением вашей области.Это потому, что класс org.apache.shiro.web.servlet.IniShiroFilter отсутствует в пути к классам.Этот класс находится в файле shiro-web-1.0.0 -ugating.jar (снимок не требуется).Убедитесь, что ваши зависимости POM перечисляют это правильно.

Кроме того, в веб-модуле вашего проекта запустите 'mvn install'.Затем посмотрите в каталог 'target', и вы должны увидеть встроенный файл .war.В командной строке запустите 'jar tf my-war-file.war'.Пока вы видите файл shiro-web-1.0.0 -ugating.jar в / WEB-INF / lib, это все, что требуется.*

(команда Apache Shiro)

3 голосов
/ 30 июля 2010

Я не мог заметить ничего очевидного, и все выглядит хорошо, но все же, 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 и делает его доступным в разделе [main] под именем iniRealm.Вы можете настроить его как любой другой объект, как описано выше.

В целях тестирования, я думаю, вы должны просто определить небольшой статический набор учетных записей пользователей в разделе [users] , как предлагается:

В разделе [пользователи] можно определить статический набор учетных записей пользователей.Это в основном полезно в средах с очень небольшим количеством учетных записей пользователей или когда учетные записи пользователей не нужно создавать динамически во время выполнения.Вот пример:

Точный синтаксис см. В документации.

0 голосов
/ 22 апреля 2013

Некоторые учебные пособия, такие как файл pom.xml веб-проекта, определены как неадекватные, например, мой веб-проект с shiro работал только после того, как я удалил зависимость Shiro-core и добавил зависимость регистрации общих файлов в мой файл pom.xml

...