gpt4 book ai didi

java - Spring Security SecurityContextHolder.getContext().getAuthentication() 返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:30 27 4
gpt4 key购买 nike

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

最初我使用以下(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 获得了身份验证对象

一旦我在使用自定义过滤器链映射的生产(spring security)配置中使用这些,问题就开始了。 (我们在生产中使用 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,但我仍然可以访问放置在 session 中的身份验证对象。

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

最佳答案

我有一个想法,但我完全不确定(我对 SS+CAS 没有任何经验,我不喜欢在 conf 中手动声明 SS 过滤器)。我知道有一个 SecurityContextPersistenceFilter 负责填充 SecurityContextHolder。请检查它是否在您的开发配置中被触发?如果它被解雇,请为您的生产环境检查同样的事情。希望这会有所帮助。

关于java - Spring Security SecurityContextHolder.getContext().getAuthentication() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17567093/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com