从 Spring security keycloak adapter 注销,但无需登录即可访问应用程序

Logout from Spring security keycloak adapter, but no need to login to access application

我的 Keycloak Spring 安全适配器配置有一个小问题。
我有一个由 Keycloak 通过 Spring 安全保护的应用程序。
它工作得很好,我可以毫无问题地连接。

我的问题是注销。
当我点击注销按钮时,我是 'logged out',即被重定向到登录页面,Keycloak 会话已清除(已在 Keycloak 中检查),所以一切似乎都很好。
问题是,当我在新标签页中再次点击访问应用程序时,没有显示登录页面,我可以直接访问应用程序。
我调试了一下,问题似乎是Keycloak令牌在应用程序中仍然可用且有效,因此无需再次登录。
我在谷歌上搜索了很多,但没有找到任何可行的解决方案。

这是我的注销配置:

...
.addFilterBefore(keycloakPreAuthActionsFilter(), LogoutFilter.class)
...
.addFilterAt(logoutFilter(), LogoutFilter.class)
...
.logout()
                .addLogoutHandler(keycloakLogoutHandler())
                .logoutUrl("/logout")
                //Allows specifying the names of cookies to be removed on logout success.
                .deleteCookies("JSESSIONID")
                //Configures SecurityContextLogoutHandler to invalidate the HttpSession at the time of logout.
                .invalidateHttpSession(true)
...
    @Bean
    public LogoutFilter logoutFilter() throws Exception {
        LogoutFilter logoutFilter = new LogoutFilter("/login.app", keycloakLogoutHandler());
        logoutFilter.setFilterProcessesUrl("/logout");

        return logoutFilter;
    }
...

所以,我的问题是:我如何在注销时 invalidate/delete/clean 应用程序中存在的 Keycloak 令牌?

非常感谢您的帮助!

因此,正如 Harish Gupta 指出的那样,解决方案是添加一个简单的 HttpServletRequest.logout() 以使其完全正常工作。

谢谢!