3

ユーザーの IP アドレスなどの追加情報を userdetails に追加したいと考えています。これを達成する方法はありますか?新しい CustomSpringUser クラスを作成しようとしましたが、この情報を Authentication オブジェクトから取得する方法が問題です。認証されたユーザーの追加情報を保存する他の方法はありますか?

Authentication auth = SecurityContextHolder.getContext().getAuthentication();

私のカスタム ユーザー クラス。

public class CustomSpringUser extends org.springframework.security.core.userdetails.User {

public String ip;

public CustomSpringUser(String username, String password, Collection<? extends GrantedAuthority> authorities) {
    super(username, password, authorities);
}

public CustomSpringUser(String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities, String ip) {
    super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
    this.ip= ip;
}

}

編集:認証に追加情報を追加できることがわかりましたが、その方法が見つかりませんでした。 http://docs.spring.io/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/core/Authentication.html#getDetails()

@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
    try {

        AppUser appUser = new AppUser();
        appUser.setUsername(userName);

        AppUser domainUser = genericDao.getByTemplate(appUser).get(0);

        boolean enabled = true;
        boolean accountNonExpired = true;
        boolean credentialsNonExpired = true;
        boolean accountNonLocked = true;

        List<String> roles = new ArrayList<String>();
        roles.add(domainUser.getRole().getName());

        return new CustomSpringUser(
                domainUser.getUsername(),
                domainUser.getPassword().toLowerCase(),
                enabled,
                accountNonExpired,
                credentialsNonExpired,
                accountNonLocked,
                getGrantedAuthorities(roles),
                ***domainUser.getAccount().getIdentificationId())*** ;

    } catch (Exception e) {
        genericLogger.saveLog(Logger.Status.ERROR, "Couldn't login", e);
        throw new RuntimeException(e);
    }
}
4

1 に答える 1

2

オブジェクト/インスタンスUserDetailsからを取得するには、メソッドを使用します。このメソッドは、ユーザーに関する追加情報を取得するために使用されます (通常は のインスタンスになります)。AuthenticationgetPrincipal()getDetails()WebAuthenticationDetails

リンク

  1. 認証javadoc
  2. Authentication.getDetails() javadoc
  3. Authentication.getPrincipal() javadoc
于 2013-09-13T13:27:16.230 に答える