2009-09-18 1 views
0

После решения всех authentication related problems в моем первом веб-приложении Spring я теперь застрял в авторизации.@ Необеспеченные броски AccessDeniedException, хотя роли правильные

Конфигурация с использованием @Secured аннотаций довольно проста, поэтому я не думаю, что совершил ошибку здесь. Кроме того, я использую Active Directory с помощью поставщика проверки подлинности LDAP и назначаю роли по группам AD, так что это тоже не проблема.

Так вот краткое описание моей проблемы:

  • необеспеченные действия работы
  • Действия с использованием @Secured("IS_AUTHENTICATED_FULLY")работы
  • Действия, используя что-то вроде @Secured("GROUP_*")не работают

При вызове защищенного действия вызывается org.springframework.security.AccessDeniedException. Вот отрывок из журналов:

DEBUG: org.springframework.security.intercept.AbstractSecurityInterceptor - Secure object: ReflectiveMethodInvocation: public org.springframework.web.servlet.ModelAndView de.dillinger.resources.controllers.HostsController.index(); target is of class [de.dillinger.resources.controllers.HostsController]; ConfigAttributes: [GROUP_IT] 
DEBUG: org.springframework.security.intercept.AbstractSecurityInterceptor - Previously Authenticated: org.springf[email protected]2a5333d9: Principal: [email protected]: Username: di32001; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: GROUP_ITS, GROUP_ITS-IT, GROUP_INTERNET, GROUP_SYSTEMGRUPPE, GROUP_IT; Password: [PROTECTED]; Authenticated: true; Details: [email protected]: RemoteIpAddress: 127.0.0.1; SessionId: 773943FFB14E512872BB6CE25F46C00A; Granted Authorities: GROUP_ITS, GROUP_ITS-IT, GROUP_INTERNET, GROUP_SYSTEMGRUPPE, GROUP_IT 

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

ответ

2

Вы используете org.springframework.security.access.vote.UnanimousBased Роль избирателя? Попробуйте изменить его на org.springframework.security.access.vote.AffirmativeBased.
Такие проблемы связаны с конфигурацией избирателя ролей.

Edit 1 (пример добавлено):

<security:global-method-security 
    secured-annotations="enabled" 
    access-decision-manager-ref="accessDecisionManager" 
/> 
<bean 
    id="accessDecisionManager" 
    class="org.springframework.security.access.vote.AffirmativeBased"> 
    <property name="allowIfAllAbstainDecisions" value="false" /> 
    <property name="decisionVoters"> 
     <list> 
      <bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter" /> 
     </list> 
    </property> 
</bean> 
+0

Является боб избирателю необходимо при настройке аутентификации LDAP с использованием ''? У образца LDAP его нет. Я проверю это, когда снова буду работать. – Koraktor

+0

Для авторизации необходим избиратель. – rodrigoap

+0

Отлично, спасибо за пояснения и пример кода. Я проверю это завтра. – Koraktor