Java 使用JNDI配置Tomcat 8和Shiro

Java 使用JNDI配置Tomcat 8和Shiro,java,tomcat,jndi,tomcat8,shiro,Java,Tomcat,Jndi,Tomcat8,Shiro,我想将ApacheShiro配置为使用JNDI来验证用户。 我配置了shiro.ini [main] shiro.loginUrl = /authentication/login.xhtml dataSource = org.apache.shiro.jndi.JndiObjectFactory dataSource.requiredType = javax.sql.DataSource dataSource.resourceName = jdbc/sqliteDB dataSource.res

我想将ApacheShiro配置为使用JNDI来验证用户。 我配置了shiro.ini

[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
我在WEB-INF/WEB.xml中添加了以下行:

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

您能给我一些建议如何解决这个问题吗?

请尝试将context.xml中的
name=“java:comp/env/jdbc/sqliteDB”
行更改为
name=“jdbc/sqliteDB”

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