当前位置: 首页 > 知识库问答 >
问题:

Spring Security Java配置自定义注销处理程序不工作

楚洋
2023-03-14

我搜索了一个解决方案,但在任何地方都找不到,至少不是当前的解决方案,也不是使用非基于xml的Spring和Spring Security配置的解决方案。

我需要实现一个将在Spring注销处理程序之前使用的处理程序。我已经阅读了很多关于LogoutSuccessHandler的文章,但这是在注销过滤器成功注销后调用的,我需要访问存储在用户会话中的用户数据以执行一些数据库条目,站点注销信息等。一旦Spring注销用户,此会话就会丢失,因此必须在此之前。

我尝试创建自己的自定义注销类,并在我的应用程序配置类中定义它,如下所示:

@Bean
public CustomLogoutHandler customLogoutHandler() {
    return new CustomLogoutHandler();
}

我的类扩展了LogoutHandler,就像spring文档所说的:

public class CustomLogoutHandler extends LogoutHandler {

    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
        // business logic here
    }
}

这仍然不起作用。我在代码中放置了一个断点,它永远不会被拾取。有人知道是什么导致了这一点吗?或者我需要做什么才能让它工作?

共有1个答案

齐建白
2023-03-14

要使用实现Spring的LogoutHandler.class的自定义注销处理程序,你需要让Spring知道你在配置文件中使用了你自己的logout handler。在安全配置文件中:

public class SecurityConfig extends WebSecurityConfigurerAdapter {  

    ... // Other methods here

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .otherConfigOptions
            .logout()
                .addLogoutHandler(customLogoutHandler())  <- custom handler
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .otherConfigOptions....
    }
}

定义bean,我把我的放在SecurityConfig.class但我认为你可以把它放在Web或应用程序配置类中,这取决于你如何设置你的项目。

@Bean
public CustomLogoutHandler customLogoutHandler() {
    return new CustomLogoutHandler();
}

然后,创建自定义注销处理程序.class,确保实现注销处理程序并覆盖注销方法。在这里,可以使用身份验证类访问已添加到用户请求范围的任何内容。

public class CustomLogoutHandler implements LogoutHandler {
    @Override
    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {

        // business logic here
    }
}

您还应该看看这个问答,它讨论了Spring中自定义处理程序映射的顺序。

我希望这能有所帮助。

 类似资料:
  • 我想编写自定义Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html.但是当前的lombok jar文件并不包含很多内容。类文件,但文件名为。症状自评量表。取而代之的是龙目山。 我发现,的。SCL. lombok文件是. class文件,Lombok的构建脚本在生成jar文件时重

  • 可以通过实现接口或扩展任何现有的实现来创建自己的自定义处理程序。 在下面的示例中,我们通过扩展类创建了自定义处理程序。 为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。 更新在DBUtils入门程序中创建的文件:MainApp.java。 按照下面的说明编译并运行应用程序。 以下是的内容。 以下是文件的内容。 以下是文件的内容。 完成创建源文件后

  • 问题内容: 我试图为类路径协议注册自定义URL处理程序,如另一个线程所述。这是代码: 该测试用例具有以下JVM参数: 该行正确输出,因此正在设置属性。但是,由于上面的调用将引发异常,因此它似乎没有生效。 如果我像注释行中那样显式提供处理程序,则一切都很好。但是,我不想明确提供它-它应该自动完成。 我究竟做错了什么? 问题答案: 我发现了问题。我使用的原始类路径处理程序类具有非默认构造函数。当然,因

  • 问题内容: 我想编写自定义的Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok- creating-custom.html 。但是当前的lombok jar文件并不包含许多.class文件,而是包含名为.SCL.lombok的文件。 我发现.SCL.lombok文件是.class文件,Lombok的生成脚本在生成ja

  • 我们可以通过实现ResultSetHandler接口或扩展ResultSetHandler的任何现有实现来创建我们自己的自定义处理程序。 在下面给出的示例中,我们通过扩展BeanHandler类创建了一个自定义处理程序EmployeeHandler。 要理解与DBUtils相关的上述概念,让我们编写一个运行读取查询的示例。 要编写我们的示例,让我们创建一个示例应用程序。 步 描述 1 更新在 DB

  • 问题内容: 我有带有代码的简单应用程序: 自定义URLStreamHandler: 安装者: 它加载data / index.html: 但结果图像没有出现。 如何允许WebView解析相对链接,例如“ download.jpg”? 问题答案: 我瘦了,我找到了解决方法: 在我们必须添加 代替 并标出网址, 用