2017-06-18 2 views
0

Ich möchte Apache Shiro für die Verwendung von JNDI konfigurieren, um Benutzer zu authentifizieren. I konfiguriert shiro.iniKonfigurieren von Tomcat 8 und Shiro mit JNDI

[main] 
shiro.loginUrl = /authentication/login.xhtml 
dataSource = org.apache.shiro.jndi.JndiObjectFactory 
dataSource.requiredType = javax.sql.DataSource 
dataSource.resourceName = jdbc/sqliteDB 
dataSource.resourceRef = true 
jdbcRealm = com.web.authentication.JdbcRealm 
jdbcRealm.dataSource = $dataSource 
jdbcRealm.permissionsLookupEnabled = true 
securityManager.realm = $jdbcRealm 

ich in WEB-INF/web.xml hinzugefügt diese Zeilen:

<resource-ref> 
     <description>postgreSQL Datasource example</description> 
     <res-ref-name>jdbc/sqliteDB</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

Tomcat/conf/context.xml

<Server port="8009" shutdown="SHUTDOWN"> 
    .................. 
    <Resource auth="Container" 
    driverClassName="org.sqlite.JDBC" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
    maxIdle="2" maxTotal="60" 
    name="java:comp/env/jdbc/sqliteDB" 
    password="" 
    type="javax.sql.DataSource" 
    url="jdbc:sqlite:/C:/sqlite/test.sqlite" 
    username="" 
    validationQuery="select sqlite_version();"/> 
    ....................... 
     </Host> 
    </Engine> 
    </Service> 
</Server> 

Aber als ich Bereitstellen des Pakets Ich erhalte Fehler:

java.lang.IllegalStateException: Unable to look up javax.sql.DataSource with jndi name 'jdbc/sqliteDB'. 
    at org.apache.shiro.jndi.JndiObjectFactory.getInstance(JndiObjectFactory.java:44) 
    at org.apache.shiro.config.ReflectionBuilder.resolveReference(ReflectionBuilder.java:417) 
Caused by: javax.naming.NameNotFoundException: Name [jdbc/sqliteDB] is not bound in this Context. Unable to find [jdbc]. 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:816) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:173) 

Können Sie mir einen Rat geben, wie ich dieses Problem beheben kann?

Antwort

0

Bitte versuchen Sie die Zeile name="java:comp/env/jdbc/sqliteDB" zu name="jdbc/sqliteDB" in context.xml zu ändern.

Verwandte Themen