Spring - 使用休眠和弹簧安全扩展类
Posted
技术标签:
【中文标题】Spring - 使用休眠和弹簧安全扩展类【英文标题】:Spring - Extending classes with hibernate and spring security 【发布时间】:2017-07-19 21:22:28 【问题描述】:我想要一个用户类、一个学生类和一个教师类。随着学生和教师类扩展用户。使用 Hibernate 和 Spring Security 执行此操作的最佳方法是什么。目前,我有预期字段的用户,并且:
@OneToOne(cascade=CascadeType.ALL)
@JoinTable(name="user_roles",
joinColumns = @JoinColumn(name="user_id", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name="role_id", referencedColumnName="id"))
private Role role;
帮助弹簧安全。仅使用用户一切正常,但现在我正在尝试扩展用户类,但我真的不知道如何开始。 hibernate 如何处理扩展类?我仍然可以在大型用户存储库中拥有学生和教师吗?春季安全如何与此一起工作?
谢谢
【问题讨论】:
【参考方案1】:如果我正确理解您的问题,您希望 Spring Security 的 UserDetailsService 实现适用于您的 User、Teacher、Student 实例。
要实现这一点,您可以使用 Hibernate 继承支持和多态查询来获取用户信息。
Hibernate 有几种表示继承的策略(映射超类、单表、联表、每个类的表):http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-inheritance
Mapped Superclass 不适合,因为它不支持多态查询。其他 3 个。
在您的 UserDetailsService 实现中,您可以执行类似的操作
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
User user = (User) getHibernateTemplate().execute(new HibernateCallback()
public Object doInHibernate(Session session)
throws HibernateException, SQLException
Query query = session.createQuery("select u from User u where login = ?");
query.setParameter(0, username);
return query.uniqueResult();
);
if (user == null)
throw new UsernameNotFoundException("Unauthorized");
// ... usual password check follows...
// ... create UserDetails as usual
【讨论】:
以上是关于Spring - 使用休眠和弹簧安全扩展类的主要内容,如果未能解决你的问题,请参考以下文章