我已经在具有弹簧安全性的Spring Boot中实现了一个应用程序。成功登录后,我需要在jsp页面(用于标题,这意味着即使我们导航到另一个URL )中也显示用户的名字,姓氏和图像路径强>。我正在使用remember-me
使用PersistentLogin
。因此,我无法使用会话存储详细信息。因为如果关闭浏览器,会话将被破坏。
我已经实现了CustomUserDetailsService
,它返回了org.springframework.security.core.userdetails.User
@Service("customUserDetailsService")
public class CustomUserDetailsService implements UserDetailsService{
//codes
return new org.springframework.security.core.userdetails.User(
username,
password,
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
authorities);
}
我知道有两个局限性
- 如果我不使用“记住我”,则可以轻松地在会话中进行存储。
- 如果我在
User
中返回CustomUserDetailsService ...
模型类,则可以在jsp中轻松获取用户详细信息 使用<security:authentication property="principal.firstName">
的页面 在jsp中标记。但是我需要返回org.springframework.security.core.userdetails.User
不幸的是,我需要两个限制。我的User
模型班有firstName, lastName, imagePath,.. etc.
如何在jsp页面中显示用户详细信息?有没有可用的方法?提前致谢。
答案 0 :(得分:1)
内置的Spring提供了相同的解决方案。
Java代码:
public User getCurrentUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
Object principal = auth.getPrincipal();
if (principal instanceof User) {
return ((User) principal);
}
}
}
JSP代码:
${pageContext["request"].userPrincipal.principal}
答案 1 :(得分:0)
我所做的是,我创建了User
的原型,名为UserAuth
public class UserAuth extends org.springframework.security.core.userdetails.User{
private String firstName;
private String lastName;
private String imagePath;
public UserAuth(String username, String password, boolean enabled,
boolean accountNonExpired, boolean credentialsNonExpired,
boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities,
String firstName, String lastName, String imagePath) {
super(username, password, enabled, accountNonExpired,
credentialsNonExpired, accountNonLocked, authorities);
this.firstName = firstName;
this.lastName = lastName;
this.imagePath = imagePath;
}
//getters and setters
}
在CustomeUserDetailsService中
@Service("customUserDetailsService")
public class CustomUserDetailsService implements UserDetailsService{
//codes
return UserAuth
username,
password,
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
authorities,
user.getFirstName(),
user.getLastName(),
user.getImagePath());
}