[英]Spring security - Custom AuthenticationProvider not working - Java Config
[英]Spring Security Java Config Custom Logout Handler Not Working
我已经搜索过一个解决方案但是找不到任何一个,至少不是当前的一个或一个使用非基于xml的Spring和Spring Security配置。
我需要实现一个将在spring注销处理程序之前使用的处理程序。 我已经阅读了很多关于LogoutSuccessHandler的文章,但是在Logout Filter成功注销后调用了这个文章,我需要访问存储在用户会话中的用户数据来执行一些数据库条目,站点注销信息等。这个会话一旦春天退出用户就会丢失,所以它必须在此之前。
我已经尝试创建自己的自定义注销类,并在我的应用程序配置类中定义它,如下所示:
@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
}
}
这仍然无效。 我在代码中放了一个断点,它永远不会被拾取。 有没有人知道可能导致这个或我需要做什么才能使它工作?
要使用自己的自定义注销处理程序来实现Spring的LogoutHandler.class,您需要让Spring知道您在使用.addLogoutHandler的注销选项下的配置文件中使用自己的。 我想你错过了这一步。 在安全配置文件中:
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或app配置类中,具体取决于你设置项目的方式。
@Bean
public CustomLogoutHandler customLogoutHandler() {
return new CustomLogoutHandler();
}
然后,创建CustomLogoutHandler.class,确保实现LogoutHandler并覆盖注销方法。 在这里,您可以使用Authentication类访问已添加到用户请求范围的任何内容。
public class CustomLogoutHandler implements LogoutHandler {
@Override
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
// business logic here
}
}
您还应该看一下这个问题,并回答有关Spring中自定义处理程序映射顺序的内容。
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.