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 に答える