PreAuthenticatedAuthenticationToken - PullRequest
       0

PreAuthenticatedAuthenticationToken

1 голос
/ 28 марта 2012

Мне интересно, как PreAuthenticatedAuthenticationToken получает свои полномочия. У меня есть реализация UserDetails, но:

@Override
public Collection<GrantedAuthority> getAuthorities() {

    return grantedAuthorities;
}

никогда не вызывается. Это важно, потому что Spring Security (3.1) игнорирует тот факт, что я пытаюсь ограничить этот URL определенной ролью. Без роли в токене, он пропускает все. Спасибо, Эрик

public class XXXAuthenticationUserDetailsService implements
    AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken>, UserDetailsService {


private XXXService xxxService = null;

@Override
public UserDetails loadUserDetails(PreAuthenticatedAuthenticationToken token) throws UsernameNotFoundException {
    String userID = asmService.getAuthorizedUserId((String) token.getPrincipal());
    AidsBankingUser user = new AidsBankingUser();
    Collection<Delegation> delegations = findRoles(userID);     
    user.setGrantedAuthroitiesAndAgency(delegations);
    user.setUsername(userID);
    return user;
}

private Collection<Delegation> findRoles(String userID) {

    Collection<Delegation> delegations;
    try {
        delegations = xxService.getDelegationsByAppUser(Constants.APP_NAME_IN_XXX, userID, Constants.DO_NOT_INCLUDE_GUI_ROLES_FROM_XXX);

        if (delegations == null || delegations.isEmpty()) {
            Log.getGeneralLogger().fatal("No delegations returned by XXX");
            throw new AccessDeniedException("User is authenticated but unauthorized.  Please contact DPI.");
        }
        return delegations;
    } 
    catch (DataAccessException e) {
        Log.getGeneralLogger().fatal("XXX encountered a problem while retrieving delegations", e);
        throw new AccessDeniedException("Internal problem.  Please contact DPI.", e);
    }

}

public void setXxxService(XXXService asmService) {
    this.asmService = asmService;
}

@Override
public UserDetails loadUserByUsername(String arg0)
        throws UsernameNotFoundException {
    // TODO Auto-generated method stub
    return null;
}
}

Мои данные пользователя:

public class XXXUser implements UserDetails {

private static final long serialVersionUID = 6930680558235002724L;
private Collection<GrantedAuthority> grantedAuthorities = null;
private String userID = null;
private Agency agency = null;

@Override
public Collection<GrantedAuthority> getAuthorities() {

    return grantedAuthorities;
}

@Override
public String getPassword() {
    return "b";
}

@Override
public String getUsername() {
    return userID;
}

@Override
public boolean isAccountNonExpired() {
    return false;
}

@Override
public boolean isAccountNonLocked() {
    return false;
}

@Override
public boolean isCredentialsNonExpired() {
    return false;
}

@Override
public boolean isEnabled() {
    return false;
}

public Agency getAgency() {
    return agency;
}

public void setAgency(Agency agency) {
    this.agency = agency;
}

public void setUserID(String userID) {
    this.userID = userID;
}

public void setUsername(String userID) {
    this.userID = userID;
}

public void setGrantedAuthroitiesAndAgency(Collection<Delegation> delegations) {

    grantedAuthorities = new ArrayList<GrantedAuthority>();
    for (Delegation d: delegations) {
        grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_" + d.getRole().getId().toUpperCase()));
        agency = d.getAgency();
    }
    if (grantedAuthorities.isEmpty()) {
        grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.ROLE_NOROLE.toString()));
    }
}
}

1 Ответ

0 голосов
/ 17 апреля 2013

Все довольно просто: PreAuthenticatedAuthenticationToken имеет параметр конструктора для передачи полномочий:

public PreAuthenticatedAuthenticationToken(Object principal, Object credentials, Collection<? extends GrantedAuthority> authorities) {
...
}

Таким образом, вопрос в том, как PreAuthenticatedAuthenticationToken создается в вашем сценарии и почему нетпередать полномочия от вашей UserDetails реализации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...