【问题标题】:Spring Security dynamic Access EvaluatorSpring Security 动态访问评估器
【发布时间】:2014-07-30 14:32:08
【问题描述】:

我希望 Spring 安全性可以阻止对动态 URL 更改的访问

http://domain.com//** shareURL 是一个 ID,我遇到的问题是,如果我使用 shareID 1 访问,程序告诉我需要登录(一切正常)但是当我登录尝试运行 shareID 2 时,程序应该再次告诉我重新登录,因为不是我的会话,但现在.. 程序允许我访问这个 shareID。

如何阻止该用户在不登录的情况下更改 shareID?

我也在使用预授权,因为如果特定的 shareID 不需要密码,spring security 会通过身份验证以避免登录页面并注入假身份验证。 最好的问题,如果这个

ShareID 1(不需要密码) ShareID 2(需要特定密码)

如果我使用共享 1 登录(无需密码自动登录)我可以访问共享 ID 2(因为我已登录)但不应该这样做。

Spring-security.xml(仅问题配置)
-->

<!-- Share Authentication Manager-->        

<beans:bean id="shareUserService" class="com.segator.ownline.service.impl.OwnlineShareSecurityService" />
<beans:bean id="preAuthenticationProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
    <beans:property name="preAuthenticatedUserDetailsService"
                    ref="shareUserService" />
</beans:bean>

<beans:bean id="preAuthFilter"
            class="com.segator.ownline.controller.config.ShareLinkAuthenticationFilter">
    <beans:property name="authenticationManager" ref="appControlAuthenticationManager" />
</beans:bean>

<authentication-manager alias="appControlAuthenticationManager" id="shareAuth">
    <authentication-provider ref="preAuthenticationProvider" />
</authentication-manager>  

我认为我需要一个额外的配置来告诉 Spring Security,如果用户更改 shareID 需要登录,例如我是否可以对拦截器 URL 实施正确的方法 例子

intercept-url pattern="/share/**" access="hasRole('ROLE_SHARE') && sameShareIDLogged()"

对不起,我的英语不好,我现在正在学习。

【问题讨论】:

    标签: java spring spring-mvc spring-security pre-authentication


    【解决方案1】:

    我解决了在 preAuthFilter 上添加一些属性的问题

        <beans:property name="authenticationManager" ref="shareAuthenticationManager" />
        <beans:property name="checkForPrincipalChanges" value="true" />
        <beans:property name="invalidateSessionOnPrincipalChange" value="true" /> <!--Default true but i put to understand how work-->
    

    checkForPrincipalChanges --> 如果主体与会话不同(在我的情况下主体=shareID,则尝试重新登录

    invalidateSessionOnPrincipalChange--> 生成新会话

    现在我遇到的问题是,当我在我的共享表单上运行 j_spring_security_check 时,登录正在重定向到我的默认登录表单

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 2018-02-17
      • 2017-10-14
      • 2013-12-19
      • 2020-01-25
      • 2016-12-20
      • 2021-10-03
      • 2023-02-15
      相关资源
      最近更新 更多