Spring security 在Spring Security的基本身份验证中注销不起作用
官方的Spring Github Repo自述如下: 应用程序几乎在功能上完成了。我们最后要做的事 需要做的是实现我们在 主页。如果用户经过身份验证,则显示“注销”链接 并将其挂接到AppComponent中的logout()函数。记住,它 向“/logout”发送HTTP POST,我们现在需要在 服务器。这很简单,因为它已经由 Spring Security(即,我们不需要为这种简单的使用做任何事情 案例)。要获得对注销行为的更多控制,您可以使用 例如,Web安全中的HttpSecurity回调适应于 注销后执行一些业务逻辑 摘自: 不过,我正在使用基本身份验证,并使用Postman应用程序对其进行测试。Spring security 在Spring Security的基本身份验证中注销不起作用,spring-security,http-post,logout,basic-authentication,Spring Security,Http Post,Logout,Basic Authentication,官方的Spring Github Repo自述如下: 应用程序几乎在功能上完成了。我们最后要做的事 需要做的是实现我们在 主页。如果用户经过身份验证,则显示“注销”链接 并将其挂接到AppComponent中的logout()函数。记住,它 向“/logout”发送HTTP POST,我们现在需要在 服务器。这很简单,因为它已经由 Spring Security(即,我们不需要为这种简单的使用做任何事情 案例)。要获得对注销行为的更多控制,您可以使用 例如,Web安全中的HttpSecurity
“/logout”
上的帖子给了我一个403禁止,如下所示:
{
"timestamp": "2018-07-30T07:42:48.172+0000",
"status": 403,
"error": "Forbidden",
"message": "Forbidden",
"path": "/logout"
}
我的安全配置是:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/user/save")
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/user/**")
.hasRole("USER")
.and()
.authorizeRequests()
.antMatchers("/admin/**")
.hasRole("ADMIN")
.and()
.httpBasic()
.and()
.logout()
.permitAll()
.and()
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
我希望会话无效,删除所有Cookie,这样当我使用错误凭据再次查询端点/user
时,我应该得到403。但是,即使在发布了/logout
(这会给出403)之后,应用程序也会接受上一个会话中的GET-on/user
,并向我显示用户的详细信息
终点是:
@GetMapping
public Principal user(Principal user){
return user;
}
好的,我有东西。控制台显示:
为找到无效的CSRF令牌http://localhost:8009/logout
。我明白这意味着什么,但为什么要这样?我可以在邮递员应用程序的cookies部分看到XSRF-TOKEN。唯一的原因可能是它没有发送cookie(?)好的,我制作了一个表单并发布到/logout
,效果很好。邮递员应用程序一定有问题。无论如何,在我注销之后,浏览器仍然像以前一样发送身份验证
标题,我在没有提示的情况下登录。仅供参考,在BASIC中注销没有意义。基本是无状态身份验证(随每个请求一起发送),没有应用程序注销之类的事情。。。您需要告诉浏览器停止发送授权标头。这不是应用程序所做的(与其他基于会话或基于令牌的身份验证方案不同,应用程序可以使其持有的某些状态无效)。可能重复的