Spring Security taglib sec:autorisieren mit Rolle-Hierarchie funktioniert nicht
Ich kann nicht sec:autorisieren hasRole() zu arbeiten, mit der Rolle, die Hierarchie. Wenn ich einen Benutzer mit der Rolle ROLE_BOSS die die Muttergesellschaft von ROLE_WORKER, dann wird false für aus irgendeinem Grund. In meinem service-Klassen @PreAuthorize("hasRole('ROLE_WORKER')") funktioniert allerdings. Ich nahm an, Sie beide verwendet die gleichen Prüfer, also warum nicht die taglib Arbeit? Vielen Dank für die Hilfe.
JSP:
<sec:authorize access="hasRole('ROLE_BOSS')">
<p>This shows up.</p>
</sec:authorize>
<sec:authorize access="hasRole('ROLE_WORKER')">
<p>This does not show up, but should.</p>
</sec:authorize>
-config.xml Sicherheit:
<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<property name="permissionEvaluator" ref="permissionEvaluator"/>
<property name="roleHierarchy" ref="roleHierarchy"/>
</bean>
<sec:global-method-security pre-post-annotations="enabled">
<sec:expression-handler ref="expressionHandler"/>
</sec:global-method-security>
<bean id="permissionEvaluator" class="com.myapp.security.MyPermissionEvaluator">
<constructor-arg index="0">
<map key-type="java.lang.String" value-type="com.myapp.security.Permission">
<entry key="contractReadAccess" value-ref="contractReadPermission"/>
<entry key="contractWriteAccess" value-ref="contractWritePermission"/>
</map>
</constructor-arg>
</bean>
<bean id="contractReadPermission" class="com.myapp.security.ContractReadPermission"/>
<bean id="contractWritePermission" class="com.myapp.security.ContractWritePermission"/>
<sec:http use-expressions="true" access-decision-manager-ref="accessDecisionManager">
<sec:intercept-url pattern="/worker/**" access="isAuthenticated()" requires-channel="https"/>
<sec:intercept-url pattern="/boss/**" access="hasRole('ROLE_BOSS')" requires-channel="https"/>
<sec:form-login login-page="/login" authentication-failure-url="/login?login_error=1" authentication-success-handler-ref="successHandler"/>
<sec:logout logout-url="/logout" logout-success-url="/login" invalidate-session="true"/>
<sec:remember-me/>
</sec:http>
<bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
<constructor-arg>
<list>
<ref bean="roleVoter" />
<bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
<property name="expressionHandler">
<bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">
<property name="roleHierarchy" ref="roleHierarchy"/>
</bean>
</property>
</bean>
<bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>
</list>
</constructor-arg>
</bean>
<bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
<constructor-arg ref="roleHierarchy" />
</bean>
<bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
<property name="hierarchy">
<value>
ROLE_BOSS > ROLE_WORKER
</value>
</property>
</bean>
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider user-service-ref="myUserDetailsService"/>
</sec:authentication-manager>
InformationsquelleAutor Jeremy | 2012-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für jemanden wie mich, der das arbeiten mit Java-Config. Dies ist eine sehr einfache Lösung hier, fügen Sie einfach den folgenden code in Ihrer Klasse, die sich
WebSecurityConfigurerAdapter
:InformationsquelleAutor Ashish
Sehr seltsam, und ich glaube nicht, dass dies korrekt ist, aber es scheint zu funktionieren. Ich fing an zu Graben durch die Feder-source-code und ich denke ich habe es zu arbeiten, indem Sie die DefaultWebSecurityExpressionHandler aus der accessDecisionManager und stellen Sie es an die Spitze aller meiner security-Konfigurationen. Also ganz oben auf meiner -config.xml ich habe diese:
Und meine accessDecisionManager ist jetzt:
InformationsquelleAutor Jeremy
Haben Sie versucht?
oder
InformationsquelleAutor Inês Gomes