Configuration Shiro:数据源配置中的代码重复
Configuration Shiro:数据源配置中的代码重复,configuration,datasource,code-duplication,shiro,Configuration,Datasource,Code Duplication,Shiro,我使用shiro为我的CXF web服务实现身份验证。我使用的是jdbc领域,并在ini文件的帮助下对其进行了配置(见下文)。身份验证数据与我需要的其他数据一样保存在同一数据库中,但对于系统的其余部分,我使用属性文件(也可以在下面找到)来提供连接信息 显然,这两种情况下数据源的数据是相同的,但我似乎没有找到解决代码重复的方法。有谁对Web应用程序的开发更有经验吗?如果有帮助的话,我可以同时更改shiro和系统其他部分的配置 提前感谢, 扎库姆 shiro.ini: [main] jdbcReal
我使用shiro为我的CXF web服务实现身份验证。我使用的是jdbc领域,并在ini文件的帮助下对其进行了配置(见下文)。身份验证数据与我需要的其他数据一样保存在同一数据库中,但对于系统的其余部分,我使用属性文件(也可以在下面找到)来提供连接信息 显然,这两种情况下数据源的数据是相同的,但我似乎没有找到解决代码重复的方法。有谁对Web应用程序的开发更有经验吗?如果有帮助的话,我可以同时更改shiro和系统其他部分的配置 提前感谢,
扎库姆 shiro.ini:
[main]
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.authenticationQuery = SELECT password FROM users WHERE username = ?;
ds = org.postgresql.ds.PGSimpleDataSource
ds.user = postgres
ds.password = password
ds.databaseName = servicedb
ds.serverName = localhost
ds.portNumber = 5432
jdbcRealm.dataSource = $ds
securityManager.realms = $jdbcRealm
服务属性:
db. It looks like:
db.name = servicedb
db.user = postgres
db.password = password
db.url = //localhost:5432/
使用Spring之类的容器来配置Shiro和JDBC连接。然后可以将数据源作为引用传递到JDBCRealm
<bean id="dataSourceBean" class="com.apache.commons.dbcp.BasicDataSource>
<property name="driverClassName" value"class for driver"/>
... more setup for the data source ...
</bean>
<bean id="jdbcRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
<property name="dataSource" ref="dataSourceBean"/>
<property name="permissionsLookupEnabled" value="true"/>
<property name="authenticationQuery" value="SELECT password FROM users WHERE username = ?"/>
</bean>
使用Spring之类的容器来配置Shiro和JDBC连接。然后可以将数据源作为引用传递到JDBCRealm
<bean id="dataSourceBean" class="com.apache.commons.dbcp.BasicDataSource>
<property name="driverClassName" value"class for driver"/>
... more setup for the data source ...
</bean>
<bean id="jdbcRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
<property name="dataSource" ref="dataSourceBean"/>
<property name="permissionsLookupEnabled" value="true"/>
<property name="authenticationQuery" value="SELECT password FROM users WHERE username = ?"/>
</bean>
您可以在构建过程中使用Ant或Maven(以及其他工具)自动替换令牌。
下面是一个使用Ant的示例:
<copy file="shiro.template.ini" tofile="shiro.ini" overwrite="true" />
<replace file="shiro.ini" token="@DB_NAME@" value="servicedb"/>
在构建过程中会被实际值替换:
ds.dataBaseName = servicedb
(显然,最好在配置文件中指定标记/值,并使用全局模式将替换应用于文件列表)
蚂蚁:
Maven:您可以在构建过程中使用Ant或Maven(以及其他工具)自动替换令牌。
下面是一个使用Ant的示例:
<copy file="shiro.template.ini" tofile="shiro.ini" overwrite="true" />
<replace file="shiro.ini" token="@DB_NAME@" value="servicedb"/>
在构建过程中会被实际值替换:
ds.dataBaseName = servicedb
(显然,最好在配置文件中指定标记/值,并使用全局模式将替换应用于文件列表)
蚂蚁:
Maven:虽然这是一个老问题,但我有一个类似的问题,我用以下方法解决了它。希望对其他人有所帮助
Shiro ini可用于配置任何类。对于数据源,我已经这样编写了我的应用程序特定类
import javax.sql.DataSource;
public class MyConfig
{
private static DataSource dataSource;
public void setDataSource(Object ds)
{
dataSource = (DataSource)ds;
}
public static DataSource getDataSource() // your application will use this method to get data source.
{
return dataSource;
}
}
现在在ini文件中,我向jdbc领域和我的类传递了相同的数据源引用
myConfig = my.package.MyConfig
myConfig.dataSource = $ds
虽然这是一个老问题,但我有一个类似的问题,我用下面的方法解决了它。希望对其他人有所帮助
Shiro ini可用于配置任何类。对于数据源,我已经这样编写了我的应用程序特定类
import javax.sql.DataSource;
public class MyConfig
{
private static DataSource dataSource;
public void setDataSource(Object ds)
{
dataSource = (DataSource)ds;
}
public static DataSource getDataSource() // your application will use this method to get data source.
{
return dataSource;
}
}
现在在ini文件中,我向jdbc领域和我的类传递了相同的数据源引用
myConfig = my.package.MyConfig
myConfig.dataSource = $ds
我恐怕无法验证你的答案,因为我不再从事这个项目了。我会联系我的继任者,看看他是否有兴趣尝试一下,然后再报告。话虽如此,我不喜欢使用spring的想法,因为我们必须专门为此目的引入它,这似乎有点过头了。我恐怕无法验证您的答案,因为我不再从事此项目。我会联系我的继任者,看看他是否有兴趣尝试一下,然后再报告。话虽如此,我不喜欢使用spring的想法,因为我们必须为此专门引入它,这似乎有点过头了。