2016-10-12 5 views
0

Я использую NetBean 8.2, чтобы узнать, как использовать Apache Shiro, но столкнувшись с проблемой развертывания. Когда я пытаюсь отлаживать веб-приложения на Glassfish 4.0, я получаю эту ошибку:Shiro ini не найден или пуст/неконфигурирован

Severe: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.shiro.config.ConfigurationException: Shiro INI configuration was either not found or discovered to be empty/unconfigured. 

сообщения Ошибки в точности как найденному в этом посте: netbeans 8.0.1 cant find shiro.ini. Однако мой Shiro.ini уже находится в папке WEB-INF (подтвердите, заглянув в файл WAR).

Сиро INI

[main] 
user.loginUrl = /login.xhtml 
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.authenticationQuery = select password from users where username = ? 
jdbcRealm.userRolesQuery = select name from roles where userid = (select id from users where username = ?) 

ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource 
ds.jdbcUrl=jdbc:mysql://<serverip>/<databasename> 
ds.user = <username> 
ds.password = <password> 
jdbcRealm.dataSource = $ds 
securityManager.realms = $jdbcRealm 

[urls] 
/login.xhtml = user 

web.xml

<listener> 
<listener-class> 
     org.apache.shiro.web.env.EnvironmentLoaderListener 
</listener-class> 
</listener> 
<filter> 
    <filter-name>ShiroFilter</filter-name> 
    <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> 
    <init-param> 
     <param-name>configPath</param-name> 
     <param-value>classpath:shiro.INI</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>ShiroFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 

С или без узла INIT-парам, та же ошибка отображается в журнале консоли.

+0

Где находится папка WEB-INF? –

+0

Буквально, только внутри WEB-INF, а не в WEB-INF/lib в учебнике Info-Q и BalusC. В моем предыдущем тесте, используя встроенные имена пользователей в INI, он будет развернут в Glassfish. – MooCow

+0

Должно быть в 'WEB-INF/classes', так как вы просите загрузить его из' classpath'. Кроме того, если это не Windows, регистр в имени имеет значение, поэтому 'shiro.INI' и' shiro.ini' ссылаются на разные ресурсы. –

ответ

0

Комментарий код Shiro в web.xml и попробовать это (я думаю, конфиг путь делает самое худшее)

<listener> 
    <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> 
</listener> 
<filter> 
    <filter-name>ShiroFilter</filter-name> 
    <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> 
</filter> 
    <filter-mapping> 
     <filter-name>ShiroFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

Также первый инициализировать дц и только после этого приступить к настройке jdbcrealm так как вы не создавать некоторый экземпляр перед правильной инициализацией свойств.

[main] 
user.loginUrl = /login.xhtml 

ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource 
ds.jdbcUrl=jdbc:mysql://<serverip>/<databasename> 
ds.user = <username> 
ds.password = <password> 

jdbcRealm.dataSource = $ds 
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.authenticationQuery = select password from users where username = ? 
jdbcRealm.userRolesQuery = select name from roles where userid = (select id from users where username = ?) 

securityManager.realms = $jdbcRealm 

[urls] 
/login.xhtml = user