Вопрос по spring-security, java – каков фактический тип параметра объекта в методе голосования весеннего избирателя при принятии решения о доступе к безопасности

3

В настоящее время я работаю над простым контролем доступа на основе ролей в Spring. Я использую реализацию AccessDecisionVoter. Так что мне интересно, что такое параметр Object o в

public int vote(Authentication authentication, Object o, Collection<ConfigAttribute> configAttributes) { 

метод? В документации Spring говорится, что это «защищенный объект». Я использую URL-адрес перехвата, и этого избирателя вызывают, так что это контроллер? Или это просто строка URL?

Заранее спасибо.

Ваш Ответ

1   ответ
6

AccessDecisionVoter должен быть уже общим, с<S> параметр, используемый в качестве второго аргумента в методе голосования. Вы можете просмотреть исходный код реализации AccessDecisionVoter (например,WebExpressionVoter который реализуетAccessDecisionVoter<FilterInvocation>) чтобы понять концепцию. Некоторые из этих реализаций используют Object как универсальный параметр, потому что им вообще не нужно использовать защищенный объект (например,RoleVoter).

В вашем случае вам, вероятно, нужно переопределитьsupports(Class<?>) Метод (из документов: Этоindicates whether the AccessDecisionVoter implementation is able to provide access control votes for the indicated secured object type.) получитьFilterInvokation как охраняемый объект, какWebExpressionVoter делает:

@Override
public boolean supports(Class<?> clazz) {
    return clazz.isAssignableFrom(FilterInvocation.class);
}

и тогда ваша реализация голоса может быть:

@Override
public int vote(Authentication authentication, FilterInvocation fi,
    Collection<ConfigAttribute> attributes) {
  String url = fi.getRequestUrl();
  // rest of code, you can also fetch request / response from fi
спасибо человек, я распечатал объект, и он показал мне, что это на самом деле объект FilterInvocation. LostMohican

Похожие вопросы