Безопасность Spring — почему RoleVoter поддерживает все классы, а WebExpressionVoter поддерживает только подклассы FilterInvocation?

В методе 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, которого нет. т. Но это работает. Так что же я тут не так понимаю?

5
задан Daud 11 April 2012 в 13:48
поделиться