in src/main/java/com/googlesource/gerrit/plugins/saml/SamlWebFilter.java [147:183]
public void doFilter(ServletRequest incomingRequest, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
/* The first thing we do is to wrap the request in an anonymous request, so in case
a malicious user is trying to set the headers manually, they'll be discarded.
*/
HttpServletRequest httpRequest = new AnonymousHttpRequest((HttpServletRequest) incomingRequest);
HttpServletResponse httpResponse = (HttpServletResponse) response;
AuthenticatedUser user = userFromRequest(httpRequest);
try {
if (isSamlPostback(httpRequest)) {
J2EContext context = new J2EContext(httpRequest, httpResponse);
signin(context);
} else if (isGerritLogin(httpRequest)) {
if (user == null) {
J2EContext context = new J2EContext(httpRequest, httpResponse);
redirectToIdentityProvider(context);
} else {
HttpServletRequest req = new AuthenticatedHttpRequest(httpRequest, user);
chain.doFilter(req, response);
}
} else if (isGerritLogout(httpRequest)) {
httpRequest.getSession().removeAttribute(SESSION_ATTR_USER);
chain.doFilter(httpRequest, httpResponse);
} else {
chain.doFilter(httpRequest, httpResponse);
}
} catch (HttpAction httpAction) {
// In pac4j v3.4.0 SLO (Single Log Out) throws HttpAction with code 200.
// Detect that flow and recover by redirecting to the main gerrit page.
if (httpAction.getCode() != 200) {
throw new TechnicalException("Unexpected HTTP action", httpAction);
}
httpResponse.sendRedirect(httpRequest.getContextPath() + "/");
}
}