in hawtio-system/src/main/java/io/hawt/web/auth/AuthenticationFilter.java [41:100]
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
LOG.trace("Applying {}", getClass().getSimpleName());
HttpServletRequest httpRequest = (HttpServletRequest) request;
String path = httpRequest.getServletPath();
LOG.debug("Handling request for path {}", path);
if (authConfiguration.getRealm() == null || authConfiguration.getRealm().equals("") || !authConfiguration.isEnabled()) {
LOG.debug("No authentication needed for path {}", path);
chain.doFilter(request, response);
return;
}
HttpSession session = httpRequest.getSession(false);
if (session != null) {
Subject subject = (Subject) session.getAttribute("subject");
// For Spring Security
if (AuthSessionHelpers.isSpringSecurityEnabled()) {
if (subject == null && httpRequest.getRemoteUser() != null) {
AuthSessionHelpers.setup(
session, new Subject(), httpRequest.getRemoteUser(), timeout);
}
chain.doFilter(request, response);
return;
}
// Connecting from another Hawtio may have a different user authentication, so
// let's check if the session user is the same as in the authorization header here
if (AuthSessionHelpers.validate(httpRequest, session, subject)) {
executeAs(request, response, chain, subject);
return;
}
}
LOG.debug("Doing authentication and authorization for path {}", path);
AuthenticateResult result = new Authenticator(httpRequest, authConfiguration).authenticate(
subject -> executeAs(request, response, chain, subject));
HttpServletResponse httpResponse = (HttpServletResponse) response;
switch (result) {
case AUTHORIZED:
// request was executed using the authenticated subject, nothing more to do
break;
case NOT_AUTHORIZED:
ServletHelpers.doForbidden(httpResponse);
break;
case NO_CREDENTIALS:
if (authConfiguration.isNoCredentials401()) {
// return auth prompt 401
ServletHelpers.doAuthPrompt(authConfiguration.getRealm(), httpResponse);
} else {
// return forbidden 403 so the browser login does not popup
ServletHelpers.doForbidden(httpResponse);
}
break;
}
}