Java 在CustomLogoutSuccessHandler中,身份验证对象始终为null
我的自定义logoutSuccesshandler中的身份验证对象总是为null,我不确定问题出在哪里:( 以下是spring安全文件:Java 在CustomLogoutSuccessHandler中,身份验证对象始终为null,java,spring,spring-security,Java,Spring,Spring Security,我的自定义logoutSuccesshandler中的身份验证对象总是为null,我不确定问题出在哪里:( 以下是spring安全文件: <sec:http auto-config="true" entry-point-ref="ssoProcessingFilterEntryPoint" access-decision-manager-ref="affirmativeBased"> <sec:intercept-url pattern=
<sec:http auto-config="true" entry-point-ref="ssoProcessingFilterEntryPoint"
access-decision-manager-ref="affirmativeBased">
<sec:intercept-url pattern="/afterAuthn/**" access="${spring.security.role}" />
<sec:intercept-url pattern="/tenancy/**" access="${spring.security.role}" />
<!-- Add permissions to specific URLS - i.e. IAM.User.Read for /resources/** -->
<sec:intercept-url pattern="/**"
access="${default.permission}" />
<sec:logout invalidate-session="true" delete-cookies="true"
success-handler-ref="customLogoutSuccessHandler" />
<sec:custom-filter ref="ssoAuthenticationFilter"
position="PRE_AUTH_FILTER" />
<sec:session-management>
<sec:concurrency-control max-sessions="1" />
</sec:session-management>
</sec:http>
..
<bean id="customLogoutSuccessHandler"
class="usermgmt.service.CustomLogoutSuccessHandler">
<property name="defaultLogoutSuccessUrl" value="${service.provider.logout.success.url}"/>
</bean>
在这里,身份验证始终为NULL,Spring安全版本为3.1.0。发布版这可能是因为您在Spring security中配置了SecurityContextLogoutHandler。SecurityContextLogoutHandler清除安全上下文,从而清除身份验证对象。在ord中,您的自定义处理程序在SecurityContextLogoutHandler之后调用er要保留身份验证对象,您必须创建自定义SecurityContextLogoutHandler,并在其中具有必要的逻辑 在该类中,您有两个选项:
这不是正确的行为吗?我的意思是,如果用户自己正确地注销了,身份验证对象应该是空的,因为实际上没有什么可显示的。如果身份验证对象不是空的,这意味着您必须手动取消对用户的身份验证。是的,这是正确的行为,供参考,请检查以下URL:我已经挖掘了一个在代码中输入ile,这并不像我们想象的那么简单。检查Spring Security WEB中的
LogoutFilter
类。查看doFilter()
方法,您将看到,获得了身份验证对象,然后将其传递给logout()
方法,最后是您的LogoutSuccessHandler
。这意味着,您的SecurityContext为您提供null而不是身份验证对象(此处不应出现)。您可以调试此方法并找出您的身份验证为空的原因。当我尝试URL示例时,它工作得非常好,但当我尝试与我的应用程序集成时,我得到了空值。因此,我猜,调试是唯一剩下的选项。谢谢。!@Waheed您调试了吗?结果如何?如果您共享您的findi,那将非常好ngs。。。
public class CustomLogoutSuccessHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
if (authentication == null) {
System.out.println("NULL");
} else {
System.out.println("NOT NULL");
}
}}