在Spring中如何从“<sec:authentication property =”principal.username“>”</sec:authentication>打印用户名和姓氏

时间:2013-06-25 12:26:25

标签: java spring spring-security

如何从<sec:authentication property="principal.username"/>

打印用户名和姓氏

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

1 个答案:

答案 0 :(得分:10)

我猜你在谈论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"/>来显示当前用户的名字和姓氏。