2013-06-27 2 views
1

У меня возникла проблема, когда мой метод Controller с @RolesAllowed работает правильно, но если я пытаюсь использовать @Secured, я получаю AccessDeniedException. Хотя я бы предпочел использовать @RolesAllowed Annotation, было объявлено, что для этого проекта мы должны использовать @Secured, потому что имя менее запутанно при сопоставлении с нашими прежними правами доступа.Spring Security @RolesAllowed Works, но @Secured дает мне AccessDeniedException весной 3.2 с Spring Security 3.1

У меня есть аннотация настроена следующим образом:

<security:global-method-security jsr250-annotations="enabled" secured-annotations="enabled" pre-post-annotations="enabled" /> 

Когда я использую @RolesAllowed("COMPANY_SEE_REPORTS"), который имеет мой пользователь, он работает правильно. Когда я использую @Secured("COMPANY_SEE_REPORTS"), я получаю AccessDeniedException. Просто чтобы убедиться, что @RolesAllowed работает правильно, я изменил роль на роль, которой не было, и в этот момент @RolesAllowed бросил. Поэтому мой вопрос: как я могу заставить @Secured работать правильно?

ответ

2

Попробуйте использовать роль безопасности с именем, которое заканчивается ROLE

From Spring Security Reference:

RoleVoter

Наиболее часто используемые AccessDecisionVoter обеспечены Spring безопасности является простой RoleVoter, который обрабатывает конфигурацию атрибуты как простые имена ролей и голоса для предоставления доступа, если пользователю назначена эта функция .

Он будет голосовать, если любой ConfigAttribute начинается с префикса ROLE_. Это будет голосовать за предоставление доступа, если есть GrantedAuthority, который возвращает представление String (через метод getAuthority()), точно равное одному или нескольким ConfigAttributes, начинающимся с префикса ROLE_. Если нет точного соответствия любому ConfigAttribute, начиная с ROLE_, , RoleVoter будет голосовать за отказ в доступе. Если ConfigAttribute не начинается с ROLE_, избиратель воздержится.

Но вы можете изменить префикс RoleVoter RoleVoter#setRolePrefix(String rolePrefix)

+0

То есть на самом деле не вариант для нашей системы. Значение роли здесь не совсем применимо, и в нашей системе они назовут это «Право» (роль которого - сбор или права). У нас слишком строгая модель безопасности, и мы хотим включить индивидуальные права, а не только на уровень ролей. – haskovec

+0

Вы пробовали рабочий стол с помощью «ROLE» в конце? – Ralph

+0

Я не пробовал работу, потому что с точки зрения моей компании они не считают ее ролью, которую они считают правильным (поскольку здесь у нас очень мелкие права). На данный момент мы просто используем параметр, разрешенный ролями. Я могу позже выкопать источник весны, чтобы узнать, требуется ли им роль для использования @Secured. – haskovec