Spring安全授权

时间:2014-11-12 09:20:18

标签: java spring java-ee spring-security

使用Spring 3.2 + Hibernate 4 + maven创建了一个Web应用程序。

现在我想根据用户角色进行身份验证和授权。截至目前,我并不专注于身份验证。让我们说用户是有效的,我在对象的某处有角色。

现在我想开始使用授权部分。我是新人,不知道如何继续。我做了一些R& D在网上,但似乎很难。

我有一份文件,其中写了我需要做的事情。我想问一些问题:

  • 采用基于角色的访问控制框架来控制权限:请解释一下。我认为这是基于角色的授权。

  • UI级别权限,方法级别权限,对象级别权限:我在网上搜索,发现对象级别权限类似于创建ACL(访问控制列表),看起来非常复杂。为什么需要具有对象级别权限。

  • 对象的动态权限评估:为什么需要它。

  • 我在网上搜索@PreAuthorize并且@PostAuthorize在方法级权限上。 Spring AOP是否需要这样做。截至目前,我们现在正在申请中使用Spring AOP。 请帮我解决一下。

1 个答案:

答案 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名称userDetailsS​​ervice来从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'/>
相关问题