Sag*_*gar 16 java spring jpa spring-mvc spring-security
我是Spring的新手.
我们正在使用弹簧安全功能.数据库连接:JPA的eclipselink实现.数据库:MySql
在使用spring security时,身份验证提供程序的配置如下, -
<authentication-provider>
<jdbc-user-service id="userDetailsService" data-source-ref="Datasource" />
</authentication-provider>
Run Code Online (Sandbox Code Playgroud)
但是在JPA中我们没有定义数据源,我们使用Persistence单元和provider jpa.PersistenceProvider.
那么我们如何配置身份验证提供程序以便使用JPA进行数据库连接?
data-source-ref字段究竟应该包含什么才能使用数据库进行身份验证?
先感谢您.
Sea*_*oyd 22
基本上你可能需要自己实现UserDetailsService
.
因此,您将拥有一个User
实体,您的UserDetailsService
实现将查找用户并将其转换为UserDetails
对象(或者您的实体必须实现UserDetails
).
示例实施:
public class MyUserDetailsService implements UserDetailsService{
private EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager newEm){
this.entityManager = newEm;
}
public UserDetails loadUserByUsername(String username){
// assuming that you have a User class that implements UserDetails
return entityManager.createQuery("from User where username = :username", User.class)
.setParameter("username", username)
.getSingleResult();
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其添加到用户 spring-security.xml
<authentication-manager>
<authentication-provider user-service-ref="MyUserDetailsService" />
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)
cra*_*man 12
在您的情况下,更简单的身份验证方法是让您的一个服务层类实现org.springframework.security.core.userdetails.UserDetailsService
接口.该接口只包含一种方法UserDetails loadUserByUsername(String username)
.您必须确保返回UserDetails
给定用户名的实例.
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
// load and return user using your regular JPA techniques here
...
}
Run Code Online (Sandbox Code Playgroud)
在服务类中实现此方法后,您只需要将其引用添加到spring配置文件中:
<authentication-manager>
<authentication-provider user-service-ref="myServiceLayerClassInstance">
</authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14617 次 |
最近记录: |