因此,我添加了一个新的控制器方法,该方法无需注销即可注销用户,如下所示:
public String quickLogout (HttpServletRequest request, HttpServletResponse response) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null){
new SecurityContextLogoutHandler().logout(request, response, auth);
}
return "redirect: /login?logout";
}
这可以按预期工作,并且将用户注销,但是只要调用此方法,然后我尝试重新登录,就会被定向到以下URL:http://localhost:8080/%20/login?logout
它应该将其定向到:http://localhost:8080/
带确认然后登录的常规注销也没有此错误,并且在应用程序启动时的首次登录也没有此错误。我正在使用基本的Spring Security登录,所以不确定为什么要这样做。
有想法吗?
答案 0 :(得分:0)
在评论中对鲍勃·唐(Bob Tang)表示敬意:是的,所有空格都在重定向中使用,所以代替:
return "redirect: /login?logout";
使用:
return "redirect:/login?logout";
否则会使用冒号和第一个正斜杠之间的空间,从而弄乱了导航。