package org.ovirt.engine.core.aaa.filters;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SsoLoginFilter implements Filter {
private final Logger log = LoggerFactory.getLogger(getClass());
private String loginUrl;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
loginUrl = filterConfig.getInitParameter("login-url");
if (loginUrl == null) {
throw new RuntimeException("No login-url init parameter specified for SsoLoginFilter.");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
log.debug("Entered SsoLoginFilter");
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (req.getSession(false) == null || req.getSession(false).getAttribute(FiltersHelper.Constants.LOGOUT_INPROGRESS) == null) {
StringBuffer requestURL = req.getRequestURL();
if (StringUtils.isNotEmpty(req.getQueryString())) {
requestURL.append("?").append(req.getQueryString());
}
if (!FiltersHelper.isAuthenticated(req) || !FiltersHelper.isSessionValid((HttpServletRequest) request)) {
String url = String.format("%s%s&app_url=%s&locale=%s",
req.getServletContext().getContextPath(),
loginUrl,
URLEncoder.encode(requestURL.toString(), "UTF-8"),
request.getAttribute("locale").toString());
log.debug("Redirecting to {}", url);
res.sendRedirect(url);
} else {
log.debug("Already logged in, executing next filter in chain.");
chain.doFilter(request, response);
}
}
log.debug("Exiting SsoLoginFilter");
}
@Override
public void destroy() {
}
}