通过JPA使用Spring Security


问题内容

我是Spring的新手。

我们正在使用Spring Security功能。数据库连接:JPA的eclipselink实现。数据库:MySql

使用spring security时,身份验证提供程序的配置如下-

<authentication-provider>

    <jdbc-user-service id="userDetailsService" data-source-ref="Datasource" />

    </authentication-provider>

但是在JPA中,我们没有定义数据源,我们将Persistence unit与provider一起使用 jpa.PersistenceProvider.

那么,我们如何配置身份验证提供程序,以便将JPA用于数据库连接?

数据源引用字段应包含什么内容才能使用数据库进行身份验证?

先感谢您。


问题答案:

基本上,您可能需要实现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

<authentication-manager>
   <authentication-provider user-service-ref="MyUserDetailsService" />
</authentication-manager>