在JPA中使用Spring Security

我是Spring的新手。

我们正在使用弹簧安全function。 数据库连接:JPA的eclipselink实现。 数据库:MySql

使用spring security时,身份validation提供程序的配置如下, –

   

但是在JPA中我们没有定义数据源,我们使用持久性单元和提供者jpa.PersistenceProvider.

那么我们如何配置身份validation提供程序以便使用JPA进行数据库连接?

data-source-ref字段究竟应该包含什么才能使用数据库进行身份validation?

先谢谢你。

基本上你可能需要自己实现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(); } } 

然后将其添加到用户spring-security.xml

    

在您的情况下,更简单的身份validation方法是让您的一个服务层类实现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 ... } 

在服务类中实现此方法后,您只需要将其引用添加到spring配置文件中: