否认春季安全的相同角色的多用户访问(denying access for multiple user

2019-08-06 10:27发布

我碰到一个这样的情况:我的应用程序有几个角色(管理员,版主,用户)。 主持人和用户可以编辑一些表格。 所有permisions都OK。 但是,当我loggen以用户身份(角色的用户)和URL更改身份证,我可以简单地获得和其他用户(角色的用户)的编辑形式。

如何拒绝访问,并防止这种行为?

PS。 春春的安全的版本是3.1.2

更新 - 增加春季安全上下文

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                    http://www.springframework.org/schema/security
                    http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http use-expressions="true" auto-config="false"
        entry-point-ref="authenticationEntryPoint" access-denied-page="/403.jsp">
        <form-login login-page="/login.html"
            authentication-failure-url="/login.html?error=true"
            login-processing-url="/j_spring_security_check"
            authentication-success-handler-ref="successHandler" />
        <logout logout-url="/logout" logout-success-url="/login.html" />
        <intercept-url pattern="/admin/**" access="hasRole('adminViewPermission')" />
        <intercept-url pattern="/moderator/**" access="hasRole('moderatorViewPermission')" />

        <intercept-url pattern="**/form-management"
            access="hasRole('formManagementPermission')" />

    </http>


    <authentication-manager alias="authenticationManager">
        <authentication-provider user-service-ref="userDetailsService" />
    </authentication-manager>

    <beans:bean id="authenticationEntryPoint"
        class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:property name="loginFormUrl" value="/login.html" />
        <beans:property name="forceHttps" value="false" />
    </beans:bean>

    <beans:bean id="successHandler"
        class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
        <beans:property name="defaultTargetUrl" value="/authenticate" />
        <beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
    </beans:bean>

    <beans:bean id="userDetailsService"
        class="com.jack.MyYserDetailsService">
    </beans:bean>
</beans:beans>

Answer 1:

它看起来像你想考虑到实际的域对象的安全规则。 普通SpringSecurity设置与用户和角色可以添加这样的安全规则:谁(有一定的作用athenticated用户)可以访问某些网址/方法调用。 如果你想成为像这样能够提高使用规则:谁(有一定的作用athenticated用户)可以访问某些网址/方法调用,什么域对象,他可以使用 ,那么你需要使用ACL功能 。

编辑。 但是,如果你需要这样便建立ACL 只是一个安全规则可能是矫枉过正。 您可以尝试通过定制的网络安全性表达增强您的实际SpringSecurity设置:

<intercept-url pattern="/moderator/**" access="hasRole('moderatorViewPermission') and userIsAuthor()" />

当您userIsAuthor()方法:

  • 从该网址提取的对象ID(我想是这样/主持人/项/ 56)
  • 检查当前用户是项目ID = 56的作者。


文章来源: denying access for multiple users of same role in spring security