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的想法,因为我们必须为此专门引入它,这似乎有点过头了。