在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配置文件中: