@Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { RequestWrapper requestWrapper = new RequestWrapper(request); String relayState = request.getParameter("RelayState"); Map<String, String> params = JsonUtils.readValue(relayState, new TypeReference<Map<String, String>>() {}); if(params != null) { String redirect = params.get("redirect"); if(StringUtils.hasText(redirect)) { requestWrapper.setParameter("redirect", redirect); } String clientId = params.get("client_id"); if(StringUtils.hasText(clientId)) { requestWrapper.setParameter("client_id", clientId); } } wrappedHandler.onLogoutSuccess(requestWrapper, response, authentication); }
@Autowired List<LogoutHandler> logoutHandlers; @Autwired LogoutSuccessHandler logoutSuccessHandler; private void doLogout() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); for (LogoutHandler handler : handlers) handler.logout(request, response, auth); logoutSuccessHandler.onLogoutSuccess(request, response, auth); }
@Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { for (Map.Entry<RequestMatcher, LogoutSuccessHandler> entry : this.matcherToHandler .entrySet()) { RequestMatcher matcher = entry.getKey(); if (matcher.matches(request)) { LogoutSuccessHandler handler = entry.getValue(); handler.onLogoutSuccess(request, response, authentication); return; } } if (this.defaultLogoutSuccessHandler != null) { this.defaultLogoutSuccessHandler.onLogoutSuccess(request, response, authentication); } }
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; if (requiresLogout(request, response)) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (logger.isDebugEnabled()) { logger.debug("Logging out user '" + auth + "' and transferring to logout destination"); } this.handler.logout(request, response, auth); logoutSuccessHandler.onLogoutSuccess(request, response, auth); return; } chain.doFilter(request, response); }
@Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { if (LogoutStatus.REDIRECT.equals(request.getAttribute(RUN_SUCCESS))) { for (LogoutHandler handler : ofNullable(delegates).orElse(emptyList())) { handler.logout(request, response, authentication); } } else if (LogoutStatus.SUCCESS.equals(request.getAttribute(RUN_SUCCESS))) { for (LogoutHandler handler : ofNullable(delegates).orElse(emptyList())) { handler.logout(request, response, authentication); } if (successHandler != null) { successHandler.onLogoutSuccess(request, response, authentication); } } } }