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

2022-09-01 11:11:52

为了让基本的安全功能正常工作,我将以下初学者包添加到我的 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的应用程序中实现“注销”功能的最佳方法是什么?


答案 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");

最后一行是重要的。


答案 2

推荐