gpt4 book ai didi

java - Spring - 使用 hibernate 和 spring security 扩展类

转载 作者:行者123 更新时间:2023-11-30 22:03:34 25 4
gpt4 key购买 nike

我想要一个用户类、一个学生类和一个教师类。随着学生和教师类扩展用户。使用 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;

帮助 spring 安全。仅使用用户一切正常,但现在我正在尝试扩展用户类,但我真的不知道如何开始。 hibernate 如何处理扩展类?我还能在大型用户存储库中拥有学生和教师吗? Spring Security 如何与此一起工作?

谢谢

最佳答案

如果我对您的问题的理解正确,您希望 Spring Security 的 UserDetailsS​​ervice 实现适用于您的 User、Teacher、Student 实例。

为此,您可以使用 Hibernate 继承支持和多态查询来获取用户信息。

Hibernate 有几种表示继承的策略(Mapped SuperclassSingle TableJoined TableTable per Class>): http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-inheritance

Mapped Superclass 不适合,因为它不支持多态查询。其他 3 个。

在您的 UserDetailsS​​ervice 实现中,您可以做类似的事情

@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
}

关于java - Spring - 使用 hibernate 和 spring security 扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42516655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com