@Secured joga AccessDeniedException embora papéis estão corretas
-
22-07-2019 - |
Pergunta
Depois de resolver todos autenticação problemas relacionados em minha primeira aplicação Primavera web agora estou preso com autorização.
Configuração usando anotações @Secured
é bem simples, então eu não acho que eu cometi um erro aqui. Além disso Eu estou usando um Active Directory usando o provedor de autenticação LDAP e papéis atribuir por grupos de anúncios, por isso não é um problema.
Então aqui está um resumo breve do meu problema:
- acções inseguros trabalho
- Ações usando
@Secured("IS_AUTHENTICATED_FULLY")
trabalho - Ações usando algo como
@Secured("GROUP_*")
não funcionam
Ao chamar uma ação garantido um org.springframework.security.AccessDeniedException
é lançada. Aqui está um trecho dos registros:
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.springframework.security.providers.UsernamePasswordAuthenticationToken@2a5333d9: Principal: org.springframework.security.userdetails.ldap.Person@1422384: 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: org.springframework.security.ui.WebAuthenticationDetails@0: RemoteIpAddress: 127.0.0.1; SessionId: 773943FFB14E512872BB6CE25F46C00A; Granted Authorities: GROUP_ITS, GROUP_ITS-IT, GROUP_INTERNET, GROUP_SYSTEMGRUPPE, GROUP_IT
Como você pode ver a ação requer o papel GROUP_IT
e meu objeto de usuário tem este privilégio. Eu realmente não sei o que está causando esse problema.
Solução
Você está usando org.springframework.security.access.vote.UnanimousBased
O papel do eleitor? Tente mudá-lo para org.springframework.security.access.vote.AffirmativeBased
.
Este tipo de problemas estão relacionados à configuração de papel eleitor.
<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>