Использование hasAuthority, когда роль является объектом JSON

java spring spring-security

284 просмотра

1 ответ

У меня возникают трудности с проверкой прав доступа пользователя, потому что роль представлена ​​в виде объекта JSON. Я не могу получить доступ к роли. Код приведен ниже

@PreAuthorize("hasAuthority({'\"roleId\":\"1\",\"roleName\":\"USER\"'})")
@GET
public List<String> find() {
    return "successfully accessed";
}
Автор: Prashobh K V Источник Размещён: 08.11.2019 11:20

Ответы (1)


0 плюса

Я не знаю, возможно ли это с помощью hasAuthorityдирективы.

Однако, если вы запускаете новое приложение или у вас есть возможность изменить существующую обработку ролей, я бы порекомендовал реализовать ваш собственный ролевый сопоставитель. Это может выглядеть так:

@Bean
public GrantedAuthoritiesMapper myAuthoritiesMapper() {
    return authorities -> {
        return authorities.stream()
            .map(GrantedAuthority::getAuthority)
            .map(s -> {
                ObjectMapper mapper = new ObjectMapper();
                Role role = mapper.readValue(s, Role.class);
                //return roleName or custom string combination of id, name etc.
                return role.getRoleName();
            })
            .map(SimpleGrantedAuthority::new)
            .collect(toList());
    };
}

и ваш класс Role Bean:

class Role {

    private String roleId;
    private String roleName;

    //getters and setters
}

После этого вы можете использовать:

@PreAuthorize("hasAuthority("ROLE_USER")

(например, USERроль пользователя)

Автор: Maciej Marczuk Размещён: 20.08.2016 01:54
Вопросы из категории :
32x32