使用Spring 3.2 + Hibernate 4 + maven创建了一个Web应用程序。
现在我想根据用户角色进行身份验证和授权。截至目前,我并不专注于身份验证。让我们说用户是有效的,我在对象的某处有角色。
现在我想开始使用授权部分。我是新人,不知道如何继续。我做了一些R& D在网上,但似乎很难。
我有一份文件,其中写了我需要做的事情。我想问一些问题:
采用基于角色的访问控制框架来控制权限:请解释一下。我认为这是基于角色的授权。
UI级别权限,方法级别权限,对象级别权限:我在网上搜索,发现对象级别权限类似于创建ACL(访问控制列表),看起来非常复杂。为什么需要具有对象级别权限。
对象的动态权限评估:为什么需要它。
我在网上搜索@PreAuthorize并且@PostAuthorize在方法级权限上。 Spring AOP是否需要这样做。截至目前,我们现在正在申请中使用Spring AOP。 请帮我解决一下。
答案 0 :(得分:0)
用于授权,您需要在security.xml文件中配置一些东西
首先,您需要加载要授权的角色
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider ref="preauthAuthProvider"/>
</sec:authentication-manager>
<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService">
<bean id="userDetailsServiceWrapper" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
<property name="userDetailsService" ref="userDetailsService"/>
</bean>
</property>
</bean>
您需要创建一个bean名称userDetailsService来从DB或任何其他来源获取所有角色。
现在,您需要通过配置角色选民来配置决策管理器,说明您要授权的角色类型
<bean id="httpRequestAccessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
<property name="allowIfAllAbstainDecisions" value="false"/>
<property name="decisionVoters">
<list>
<ref bean="roleVoter"/>
之后,您需要配置一个过滤器安全拦截器,您需要在其中定义一个拦截URL,您需要在其中定义受保护资源uri并使用您要保护的角色进行访问
<bean id="fsi" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"/>
<property name="securityMetadataSource">
<sec:filter-security-metadata-source lowercase-comparisons="true">
<sec:intercept-url pattern='/test**' access='testRole'/>