在 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中实现分页