package edu.harvard.iq.dataverse.authorization;
import edu.harvard.iq.dataverse.DataverseSession;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import javax.inject.Inject;
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;
public class AuthFilter implements Filter {
private static final Logger logger = Logger.getLogger(AuthFilter.class.getCanonicalName());
@Inject
DataverseSession session;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
logger.info(AuthFilter.class.getName() + "initialized. filterConfig.getServletContext().getServerInfo(): " + filterConfig.getServletContext().getServerInfo());
try {
String glassfishLogsDirectory = "logs";
FileHandler logFile = new FileHandler(".." + File.separator + glassfishLogsDirectory + File.separator + "authfilter.log");
SimpleFormatter formatterTxt = new SimpleFormatter();
logFile.setFormatter(formatterTxt);
logger.addHandler(logFile);
} catch (IOException ex) {
Logger.getLogger(AuthFilter.class.getName()).log(Level.SEVERE, null, ex);
} catch (SecurityException ex) {
Logger.getLogger(AuthFilter.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String username = session.getUser().getIdentifier();
String remoteAddr = httpServletRequest.getRemoteAddr();
String requestUri = httpServletRequest.getRequestURI();
String userAgent = httpServletRequest.getHeader("User-Agent");
String separator = "|";
StringBuilder sb = new StringBuilder();
for (String string : Arrays.asList(username, remoteAddr, requestUri, userAgent)) {
sb.append(string + separator);
}
logger.info(sb.toString());
filterChain.doFilter(servletRequest, response);
}
@Override
public void destroy() {
throw new UnsupportedOperationException("Not supported yet.");
}
}