Пользовательские Предоставленные полномочия - PullRequest
0 голосов
/ 28 сентября 2018

Я создал CustomGrantedAuthority, который реализует интерфейс GrantedAuthority следующим образом:

CustomGrantedAuthority.java

import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObjectBuilder;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.SpringSecurityCoreVersion;
import org.springframework.util.Assert;

import com.eliza.tourism.ms.users.dao.model.ElizaTourismGroup;
import com.eliza.tourism.ms.users.dao.model.Role;

public class CustomGrantedAuthority implements GrantedAuthority {

    private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;

    private ElizaTourismGroup group;

    public CustomGrantedAuthority(ElizaTourismGroup group) {
        Assert.notNull(group, "A granted authority group representation is required");
        this.group = group;
    }

    @Override
    public String getAuthority() {
        final JsonObjectBuilder groupJsonBuilder = Json.createObjectBuilder();
        if (!group.getRoles().isEmpty()) {
            final JsonArrayBuilder rolesArrayBuilder = Json.createArrayBuilder();
            for (Role role : group.getRoles()) {
                final JsonObjectBuilder roleJsonBuilder = Json.createObjectBuilder();
                final JsonArrayBuilder privilegesArrayBuilder = Json.createArrayBuilder();
                role.getPrivileges().stream().map(privilege -> privilege.getName()).forEach(privilegesArrayBuilder::add);
                roleJsonBuilder.add(role.getName(), privilegesArrayBuilder);
                rolesArrayBuilder.add(roleJsonBuilder);
            }
            groupJsonBuilder.add(group.getName(), rolesArrayBuilder);
            return groupJsonBuilder.build().toString();
        }
        return "";
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj instanceof CustomGrantedAuthority) {
            return group.getId().equals(((CustomGrantedAuthority) obj).group.getId());
        }

        return false;
    }

    @Override
    public int hashCode() {
        return this.group.getId().hashCode();
    }

    @Override
    public String toString() {
        return this.group.getId().toString();
    }
}

И в своей сущности я вызываю этот переходный метод:

@Transient
    public Collection<GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> authorities = new ArrayList<>();
        if (groups != null && !groups.isEmpty())
            groups.stream().map(group -> new CustomGrantedAuthority(group)).forEach(authorities::add);
        return authorities;
    }

Моя проблема заключается в том, что пружина игнорирует это и всегда вызывает SimpleGrantedAuthority.java и никогда не выполняет класс CustomGrantedAuthority.java

Так чтоя должен сделать, чтобы аутентификатор вызывал мой пользовательский класс вместо SimpleGrantedAuthority.java class?

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