我的应用程序使用spring会话(带redis)。我使用自定义的登录控制器,因为我使用外部的react客户机,而不是默认的spring登录页面。
登录控制器:
@PostMapping(value = "/login", consumes = MediaType.APPLICATION_JSON_VALUE)
public String login(@RequestBody LoginDataTo loginData) {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
loginData.getEmail(),
loginData.getPassword());
Authentication authentication = this.authenticationManager.authenticate(token);
SecurityContextHolder
.getContext()
.setAuthentication(authentication);
return "OK";
}
安全配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
http
.httpBasic().disable()
.formLogin().disable() // login form is disable, because i use external React client
.csrf().disable()
.cors().disable();
http
.logout()
.logoutUrl("/logout")
.invalidateHttpSession(true);
http
.authorizeRequests()
.antMatchers("/login").anonymous()
.antMatchers("/logout").authenticated()
.anyRequest().authenticated();
}
所以。。。这个 /login
端点的工作是正确的。但是 /logout
终结点工时不正确。打电话的时候 /logout
,返回json:
{
"timestamp": "2021-03-30T13:45:09.142+00:00",
"status": 405,
"error": "Method Not Allowed",
"message": "",
"path": "/login"
}
以下是我在《 Postman 》中使用的请求: GET http://localhost:8080/logout
cookie和session被删除了,也就是说注销的工作是正确的,但是为什么它返回这个json呢?
1条答案
按热度按时间8hhllhi21#
我用计算机解决了这个问题
logoutSuccessHandler
设置:现在
/logout
呼叫返回200 ok。