使用Spring Security在JSP中显示用户详细信息

时间:2018-07-25 07:19:15

标签: spring spring-mvc jsp spring-boot spring-security

我已经在具有弹簧安全性的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页面中显示用户详细信息?有没有可用的方法?提前致谢。

2 个答案:

答案 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   

}

在CustomeUserDetailsS​​ervice中

@Service("customUserDetailsService")
public class CustomUserDetailsService implements UserDetailsService{
    //codes
    return UserAuth
        username,
        password,
        enabled,
        accountNonExpired,
        credentialsNonExpired,
        accountNonLocked,
        authorities,
        user.getFirstName(),
        user.getLastName(),
        user.getImagePath());
}