В методе supports(Class clazz)
метода RoleVoter
он всегда возвращает true, говоря, что
Эта реализация поддерживает любой тип класса, потому что она не запросить представленный защищенный объект.
Что это за "представил защищенный объект". С другой стороны, метод supports(Class clazz)
метода WebExpressionVoter
возвращает значение true, только если clazz
является подтипом FilterInvocation
. Является ли FilterInvocation
«представленным безопасным объектом» здесь и почему избиратель должен его поддерживать?
Если я использую аннотации @Secured
для своих методов и настраиваю диспетчер принятия решений о доступе для безопасности глобальных методов, который имеет WebExpressionVoter
в качестве одного из голосующих, возникает ошибка
AccessDecisionManager не поддерживает безопасный класс объекта: интерфейс org.aopalliance.intercept.MethodInvocation
Это связано с тем, что все избиратели диспетчера принятия решений о доступе (при настройке безопасности методов) должны поддерживать указанный выше класс, и хотя RoleVoter
и другие поддерживают, WebExpressionVoter
требуется подтип FilterInvocation
.
Выражения SPEL
в теге @PreAuthorize
также потребуют WebExpressionVoter
, и снова потребуется поддержка класса MethodInvocation
, которого нет. т. Но это работает. Так что же я тут не так понимаю?