5

如何打印用户的名字和姓氏<sec:authentication property="principal.username"/>

principal.username仅打印用户 ID。但我想在这里打印数据库中的用户名和姓。可能吗?

4

1 回答 1

11

我猜你在谈论 Spring Security。

这是我使用的解决方案:

创建一个将映射您的用户的类。它必须实现接口org.springframework.security.core.userdetails.UserDetails

public class MyUserDetails implements UserDetails {
    private String username;
    private String password;

    private String firstname;
    private String lastname;

    public String getFirstname() {
        return firstname;
    }

    public String getLastname() {
        return lastname;
    }

    // Etc.
}

创建一个org.springframework.security.core.userdetails.UserDetailsS​​ervice的实现,它将从数据库中加载您的用户:

@Component
public class MyUserDetailsService implements UserDetailsService {
    @Autowired
    private MyUserDAO userDAO;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        final MyUserDetails user = userDAO.getUserByUsername(username);
        if(user == null) {
            throw new UsernameNotFoundException("No user found for username '" + username +"'.");
        }
        return user;
    }
}

现在您必须告诉 Spring Security 使用您的服务从您的用户那里加载详细信息:

<authentication-manager>
    <user-service id="myUserDetailsService"/>
</authentication-manager>

现在您应该能够使用<sec:authentication property="principal.firstname"/><sec:authentication property="principal.lastname"/>显示当前用户的名字和姓氏。

于 2013-06-25T12:49:53.530 回答