在 Spring Boot 中实现“注销”功能

Posted

技术标签:

【中文标题】在 Spring Boot 中实现“注销”功能【英文标题】:Implement 'logout' functionality in Spring Boot 【发布时间】:2014-07-02 21:53:37 【问题描述】:

为了让基本的安全功能正常工作,我在我的 pom.xml 中添加了以下启动包

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

并在 application.properties 中添加了以下两个属性:

security.user.name=guest security.user.password=tiger

现在,当我点击主页时,我得到了登录框,并且登录按预期工作。

现在我想实现“注销”功能。当用户单击链接时,他/她将被注销。我注意到登录并没有在我的浏览器中添加任何 cookie。我假设 Spring Security 为用户创建了一个 HttpSession 对象。真的吗?我是否需要使该会话“无效”并将用户重定向到其他页面?在基于 Spring Boot 的应用程序中实现“注销”功能的最佳方式是什么?

【问题讨论】:

我会推荐这个教程:http://spring.io/guides/gs/securing-web/ 我已经看过这个了。问题是这是面向 Spring MVC 的,这不是我正在使用的。我们有一个基于 Spring Boot 的应用程序,我们的 UI 来自 /resources/public/index.html 我能问一下你是怎么发现 starter-security 依赖的吗? DAYS 天以来,我一直在试图弄清楚如何使用 spring boot 来运行 spring security,我不敢相信它会这么简单。 @Dany - spring-boot-starter-security 在文档中提到:spring.io/guides/gs/securing-web 你怎么知道在 application.properties 文件中添加这两个属性?我遇到的每个教程都与这个相似——配置和用户名+密码是在 java 类中设置的 【参考方案1】:

迟到总比没有好。 Spring Boot 为您默认了许多安全组件,包括 CSRF 保护。其中一件事是强制 POST 注销,请参见此处:http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/#csrf-logout

正如这表明你可以覆盖它,使用类似的东西:

http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")                                      
.anyRequest().fullyAuthenticated()
.and()
.formLogin().loginPage("/login").failureUrl("/login?error").permitAll()
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login");

最后一行很重要。

【讨论】:

我到处找这个,谢谢,有时我觉得 Spring Boot 太神奇了,让这样的事情难以追踪 简单的.logout.permitAll() 会成功的。它将重定向到login/?logout 请小心使用 GET 方法进行注销,因为这会使攻击者能够在您的网站上使用 csrf 攻击。 如何注销? window.location = "/login/?logout"; ??? 我将如何从 Angular 8 注销方法中调用它。假设我有一个按钮注销,那么我将如何调用它

以上是关于在 Spring Boot 中实现“注销”功能的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于 Keycloak/Spring 的应用程序中实现单点注销?

无法在 Spring Boot 中实现 Drools KieSession Persistence

如何使用hibernate在spring boot中实现分页

Spring Boot 会话管理——为啥会有两个 sessionRegistry 实例?

spring boot中实现响应图片的方法以及改进

如何在 servlet jsp 中实现生产就绪登录注销功能