繁体   English   中英

Spring Security SecurityContextHolder.getContext()。getAuthentication()返回null

[英]Spring Security SecurityContextHolder.getContext().getAuthentication() returns null

我已经实现了一个映射到特定URL “/ partner / login”的自定义安全机制,其中我使用自己的子类AbstractAuthenticationProcessingFilter ,它生成一个由AuthenticationProvider实现验证的子类AbstractAuthenticationToken 成功后,我调用SimpleUrlAuthenticationSuccessHandler ,它将尝试重定向到“/ UserProfile”。 “/ partner / login”处理来自我们的合作伙伴的SSO请求。 在开发过程中,我们的内部登录过程是使用Spring Security的默认登录形式进行模拟的,这就是auto-config为true的原因。

最初我使用以下(spring security)配置进行开发:

<http  auto-config="true">
    <intercept-url pattern="/**/*.jsp" access="ROLE_USER, ROLE_PARTNER_USER"/>
    <custom-filter after = "FORM_LOGIN_FILTER" ref = "partnerSsoAuthFilter"/>
</http>

现在这按预期工作 ,我在重定向到“/ UserProfile”后从SecurityContextHolder获取Authentication对象

一旦我在使用自定义过滤器链映射的生产(弹簧安全)配置中使用这些问题,问题就开始了。 (我们在生产中使用CAS进行自己的登录)

<bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
    <sec:filter-chain-map path-type="ant">
        <sec:filter-chain pattern="/partner/login" filters="sif,partnerSsoAuthFilter,etfPartner,fsi" />
        <sec:filter-chain pattern="/" filters="casValidationFilter, wrappingFilter" />**
        <sec:filter-chain pattern="/secure/receptor" filters="casValidationFilter" />
        <sec:filter-chain pattern="/j_spring_security_logout" filters="logoutFilter,etf,fsi" />
        ***More filters***
    </sec:filter-chain-map>
</bean>

这里sif,etf,fsi是常规的SecurityContextPersistenceFilter,ExceptionTranslationFilter和FilterSecurityInterceptor。

使用此配置时,重定向到“/ UserDetails” SecurityContextHolder.getContext()。getAuthentication()返回null ,但我仍然可以访问放置在会话中的身份验证对象。

我对这种行为感到困惑。 我在“/ partner / login”的两种情况下都使用相同的自定义过滤器/提供者/令牌等。 为什么在一种情况下getAuthentication()不为null而在另一种情况下它为null? 任何帮助都会很棒。 TIA。

我有一个想法,但我不确定(我没有任何SS + CAS的到期,我不喜欢在conf中手动声明SS过滤器)。 我知道有一个SecurityContextPersistenceFilter负责填充SecurityContextHolder。 请检查它是否在您的dev配置中被触发? 如果它被解雇,请为您的生产环境检查相同的内容。 希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM