Java 使用JNDI配置Tomcat 8和Shiro
我想将ApacheShiro配置为使用JNDI来验证用户。 我配置了shiro.iniJava 使用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
[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)