代码之家  ›  专栏  ›  技术社区  ›  varman

使用Spring安全性在JSP中显示用户详细信息

  •  0
  • varman  · 技术社区  · 8 年前

    我已经用Spring Security在Spring引导中实现了一个应用程序。我需要展示 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用户

    不幸的是,我需要两个限制。我的 用户 模型类有 firstName, lastName, imagePath,.. etc.

    如何在JSP页面中显示用户详细信息?有什么办法吗?事先谢谢。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Alien    8 年前

    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}
    
        2
  •  0
  •   varman    8 年前

    我做的是,我创造了一个 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   
    
    }
    

    在CustomUserDetailsService中

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