如何配置JDBCRealm以从JNDI获取其DataSource



如何使用JDBCRealm来处理servlet中的用户身份验证和授权?我能找到的唯一例子是在web.xml中创建DataSource(例如使用shiro 1.2.1对数据库进行身份验证)

我不想在我的源树中包括数据库凭据(出于明显的原因),并且更喜欢通过JNDI使用上下文定义的DataSource,就像我在开发的每个其他servlet项目中为任何其他目的使用的所有其他RDBMS一样。

如何配置Shiro JDBCRealm以从JNDI获取其DataSource

Vrushank的答案非常接近:您不需要在这里对JdbcRealm进行子类化-您可以使用Shiro的JndiObjectFactory来获取DataSource,然后在配置JdbcRealm:时引用该DataSource

[main]
dataSource = org.apache.shiro.jndi.JndiObjectFactory
dataSource.resourceName = java://app/jdbc/myDataSource
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $dataSource
#addt'l config

对于web应用程序,请将文件保存在WEB-INF/shiro.ini下。

另请参阅

  • https://github.com/danielmt/shiro-primefaces-example/blob/master/src/main/webapp/WEB-INF/shiro.ini

Shiro要使用JDBC领域的权限,这个参数是必不可少的:

jdbcRealm.permissionsLookupEnabled = true 

我在这上面浪费了很多小时,因为这个选项的默认值是false。换言之,如果不设置此选项,Shiro总是返回一个空的权限列表。

我评论了@Les Hazlewood的答案和@Recurse的评论,但新答案可能是更好的选择。

在我的情况下,我必须在weblogic上只使用JDNI数据源名称,在tomcat上使用完整路径:

Tomcat:

 ds = org.apache.shiro.jndi.JndiObjectFactory   
 ds.requiredType = javax.sql.DataSource  
 ds.resourceName = java:/comp/env/oracle/pportal_dev
 # JDBC realm config  
 jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm  
 jdbcRealm.permissionsLookupEnabled = true 
 jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
 jdbcRealm.dataSource = $ds

Weblogic

 ds = org.apache.shiro.jndi.JndiObjectFactory   
 ds.requiredType = javax.sql.DataSource   
 ds.resourceName = oracle/pportal_dev
 # JDBC realm config  
 jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm  
 jdbcRealm.permissionsLookupEnabled = true 
 jdbcRealm.dataSource = $ds

票据

ds.resourceName = java:/comp/env/oracle/pportal_dev 
vs
ds.resourceName = oracle/pportal_dev

您需要通过扩展JdbcRealm来创建自己的自定义领域,以便通过提供的JNDI以编程方式查找数据源。

然后可以将JNDI作为属性传递到shiro.ini

[main]
# realms to be used
customSecurityRealm=package.to.your.CustomRealm
customSecurityRealm.jndiDataSourceName=java:app/jdbc/myDatasource

请参阅下面的文章作为示例。它同时负责身份验证和授权。

Apache Shiro JDBC Realm

相关内容

  • 没有找到相关文章

最新更新