我使用Spring安全性来验证用户登录.
用户凭据存储在数据库中.
这是我的" appContext-security.xml "文件中的相关部分.
此代码有效 - 但我的问题是我使用原始SQL查询 " user-by-username-query "和" authority-by-username-query "标签.因此,如果我必须支持多个数据库并且如果Sql语法各不相同,那我就有问题了.
那么我可以将这些查询放在某种形式的Java类中吗?这样我可以轻松地更改该java类中的SQL语法并使这些SQL 数据库依赖?
<authentication-manager alias="authManager">
<authentication-provider>
<password-encoder hash="md5"/>
<jdbc-user-service data-source-ref="jndiDataSource"
users-by-username-query="select name, password, enabled from USER where user_status<>0 and name=?"
authorities-by-username-query="select m.name,p.name from USER m, ROLE p where m.name=? and m.application_role=p.id"/>
</authentication-provider>
</authentication-manager>
<beans:bean id="jndiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="java:/appManaged"/>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
任何帮助都感激不尽.
您可以JdbcDaoImpl手动声明为bean而不是使用<jdbc-user-service>:
<authentication-manager alias="authManager">
<authentication-provider user-service-ref = "jdbcUserService">
<password-encoder hash="md5"/>
</authentication-provider>
</authentication-manager>
<beans:bean id = "jdbcUserService"
class = "org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
<beans:property name = "dataSource" ref = "jndiDataSource" />
<beans:property name = "usersByUsernameQuery"
value = "select name, password, enabled from USER where user_status<>0 and name=?"
" />
...
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
然后你可以做任何你想做的事情,例如,声明它是从设置适当查询的工厂获得的,或类似的东西.
| 归档时间: |
|
| 查看次数: |
11611 次 |
| 最近记录: |