Spring Security: не удается очистить объект аутентификации - PullRequest
0 голосов
/ 13 марта 2020

Пытаясь выйти из системы, иметь контроллер и. jsp:

@Controller
public class LogoutController {
    @RequestMapping(value = {"/logout"}, method = RequestMethod.GET)
    public String logoutDo(HttpServletRequest request,HttpServletResponse response){
        HttpSession session= request.getSession(false);
        SecurityContextHolder.clearContext();
        session= request.getSession(false);
        if(session != null) {
            session.invalidate();
        }
        for(Cookie cookie : request.getCookies()) {
            cookie.setMaxAge(0);
        }

        return "redirect:/";
    }
}
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>

<html>

<head>
    <title>Play the game!</title>

    <link type="text/css"
          rel="stylesheet"
          href="/static/css/index.css">
</head>

<body>

<security:authorize access="isAuthenticated()">
    authenticated as <security:authentication property="principal.username" />
</security:authorize>

<a href="/logout">Logout</a>
...

Когда я нажимаю Logout, он перенаправляет обратно на страницу /, но principal.username (пользователь) по-прежнему отображается. Пожалуйста, помогите ....

1 Ответ

1 голос
/ 14 марта 2020

Попробуйте также обнулить текущую аутентификацию.

    HttpSession session = request.getSession(false);
        if (session != null) {
            logger.debug("Invalidating session: " + session.getId());
            session.invalidate();
        }
    }

    SecurityContext context = SecurityContextHolder.getContext();
    context.setAuthentication(null);

    SecurityContextHolder.clearContext();
...