gpt4 book ai didi

java - 在 Spring、Hibernate 中访问用户数据

转载 作者:行者123 更新时间:2023-12-01 12:25:08 24 4
gpt4 key购买 nike

我做了这个教程:http://www.mkyong.com/spring-security/spring-security-hibernate-annotation-example/

而且效果非常好。但我不明白一些事情。我向数据库添加一个新列。它被命名为全名。我使用 setter 和 getter 方法完成了 User 类。但例如,我如何在管理页面中访问这些数据?如何打印出实际的 session 用户名。比如:嗨,你的全名是。

编辑:那么我如何访问登录用户的其他详细信息,例如全名、地址、性别和其他类似信息,而不仅仅是用户名和密码?

Edit2:谢谢,现在更清楚了。我唯一的问题。他将自己的 User 类转换为 org.springframework.security.core.userdetails.User。并且这个类还没有全名的构造函数。那么我是否需要创建一个自己的 UserDetails 类来覆盖原始的。或者我需要做什么?

Edit3:抱歉,但我不明白这一点。哪种服务方式?你能用这个例子向我展示一下吗?非常感谢。

最佳答案

您已在 Controller 类 MainController 中添加代码,该代码在 mkyong 站点提到的示例中给出。

@RequestMapping(value = "/admin**", method = RequestMethod.GET)
public ModelAndView adminPage() {

ModelAndView model = new ModelAndView();
model.addObject("title", "Spring Security + Hibernate Example");
model.addObject("message", "This page is for ROLE_ADMIN only!");
model.setViewName("admin");

String fullName = ...; // Add the required logic to get the full name.
model.addObject("FullName", fullName); // Then add the fullName to your model object

return model;

}

然后最后编辑 admin.jsp 文件以显示全名。

更新:

所需的代码也可以在 mkyong 链接中找到。以下是取自同一页面的片段:

UserDaoImpl.java 类包含您的功能所需的所有代码。

List<User> users = new ArrayList<User>();

users = sessionFactory.getCurrentSession()
.createQuery("from User where username=?")
.setParameter(0, username)
.list();

if (users.size() > 0) {
return users.get(0);
} else {
return null;
}

当您从 hibernate 获取 User 对象时,它会加载用户的所有属性,因为您添加了新字段 - FullName,那么如果您在 hbm 文件中具有正确的映射,则该字段将由 hibernate 加载到 User 对象中。

此逻辑是使用方法 loadUserByUsername 从服务类 MyUserDetailsS​​ervice 调用的。因此,请借助服务类中的此方法,通过提供用户名输入参数来获取用户详细信息。

服务类代码:

@Transactional(readOnly=true)
@Override
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {

com.mkyong.users.model.User user = userDao.findByUserName(username);
List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRole());

return buildUserForAuthentication(user, authorities);

}

// Converts com.mkyong.users.model.User user to
// org.springframework.security.core.userdetails.User
private User buildUserForAuthentication(com.mkyong.users.model.User user, List<GrantedAuthority> authorities) {
return new User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities);
}

正如您从上面的代码中看到的,在以下行创建了一个新的 User 对象:

new User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities);

只需更新此行以包含全名,并在 User 类中添加所需的构造函数。

关于java - 在 Spring、Hibernate 中访问用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420814/

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