了解 RoleVoter 概念?
Understanding RoleVoter concept?
我可以在其中一个项目中看到以下配置
<bean id="myFilterSecurityInterceptor"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="securityMetadataSource">
<security:filter-security-metadata-source>
<security:intercept-url pattern="/user/**" access="PERMISSION_VIEW_USER" />
.....
</security:filter-security-metadata-source>
</property>
</bean>
<bean id="accessDecisionManager"
class="org.springframework.security.access.vote.AffirmativeBased" >
<property name="decisionVoters">
<list>
<bean class="org.springframework.security.access.vote.RoleVoter" />
<bean class="org.springframework.security.access.vote.RoleVoter">
<property name="rolePrefix" value="PERMISSION_"/>
</bean>
</list>
</property>
问题 1 :-
我无法理解带有 class "RoleVoter"
的两个 bean 元素在这里扮演什么角色?我的意思是单一角色选民还不够吗?
问题二:-
也在一豆下
属性 name="rolePrefix" value="PERMISSION_"
有何帮助?
我对第二个问题的理解是,当用户尝试访问 URL /user/ 时,RoleVoter 会将授予的权限与值进行匹配
针对访问属性(在本例中为 PERMISSION_VIEW_USER)给出,并且它还应以“PERMISSION_”开头(作为 rolePrefix 的值给出)。
对吗?
我通过 [此链接][1] 确认了我对问题 2 的理解。别管这个了
如果你有第二个问题的解决方案,那么第一个问题就真的得到了解答。 RoleVoter
使用的 default prefix 是 ROLE_
,因此它将忽略任何不匹配的属性。
添加第二个具有自定义前缀的选民意味着匹配 ROLE_
和 PERMISSION_
的属性将被考虑在内。不过,该行为与前缀无关,因此除非有其他原因在您的应用程序中使用不同的前缀,否则如果您只选择一个并坚持使用它会更简单。
或者,您可以使用较新的表达式语法进行访问控制,这可能更容易理解并且根本不需要任何特殊的命名约定。
我可以在其中一个项目中看到以下配置
<bean id="myFilterSecurityInterceptor"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="securityMetadataSource">
<security:filter-security-metadata-source>
<security:intercept-url pattern="/user/**" access="PERMISSION_VIEW_USER" />
.....
</security:filter-security-metadata-source>
</property>
</bean>
<bean id="accessDecisionManager"
class="org.springframework.security.access.vote.AffirmativeBased" >
<property name="decisionVoters">
<list>
<bean class="org.springframework.security.access.vote.RoleVoter" />
<bean class="org.springframework.security.access.vote.RoleVoter">
<property name="rolePrefix" value="PERMISSION_"/>
</bean>
</list>
</property>
问题 1 :-
我无法理解带有 class "RoleVoter"
的两个 bean 元素在这里扮演什么角色?我的意思是单一角色选民还不够吗?
问题二:-
也在一豆下
属性 name="rolePrefix" value="PERMISSION_"
有何帮助?
我对第二个问题的理解是,当用户尝试访问 URL /user/ 时,RoleVoter 会将授予的权限与值进行匹配 针对访问属性(在本例中为 PERMISSION_VIEW_USER)给出,并且它还应以“PERMISSION_”开头(作为 rolePrefix 的值给出)。 对吗?
我通过 [此链接][1] 确认了我对问题 2 的理解。别管这个了
如果你有第二个问题的解决方案,那么第一个问题就真的得到了解答。 RoleVoter
使用的 default prefix 是 ROLE_
,因此它将忽略任何不匹配的属性。
添加第二个具有自定义前缀的选民意味着匹配 ROLE_
和 PERMISSION_
的属性将被考虑在内。不过,该行为与前缀无关,因此除非有其他原因在您的应用程序中使用不同的前缀,否则如果您只选择一个并坚持使用它会更简单。
或者,您可以使用较新的表达式语法进行访问控制,这可能更容易理解并且根本不需要任何特殊的命名约定。