/* The contents of this file are subject to the license and copyright terms
* detailed in the license directory at the root of the source tree (also
* available online at http://fedora-commons.org/license/).
*/
package fedora.server.security.servletfilters;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author Bill Niebel
*/
public class FilterEnforceAuthn
extends FilterSetup {
protected static Log log = LogFactory.getLog(FilterEnforceAuthn.class);
@Override
public boolean doThisSubclass(ExtendedHttpServletRequest request,
HttpServletResponse response)
throws Throwable {
String method = "doThisSubclass() ";
if (log.isDebugEnabled()) {
log.debug(enter(method));
}
super.doThisSubclass(request, response);
request.lockWrapper();
boolean terminateServletFilterChain =
request.getUserPrincipal() == null;
if (terminateServletFilterChain) {
if (log.isDebugEnabled()) {
log.debug(format(method, "no principal found, sending 401"));
}
String realm = "fedora";
String value = "BASIC realm=\"" + realm + "\"";
String name = "WWW-Authenticate";
int sc = HttpServletResponse.SC_UNAUTHORIZED;
response.reset();
//httpServletResponse.sendError(sc, "supply credentials"); //same as after
if (response.containsHeader(name)) {
response.setHeader(name, value);
} else {
response.addHeader(name, value);
}
try {
response.sendError(sc, "supply credentials");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} //here, no bad auth msg at wget
response.setContentType("text/plain");
try {
response.flushBuffer();
} catch (IOException e) {
showThrowable(e, log, "response flush error");
}
}
return terminateServletFilterChain;
}
@Override
public void destroy() {
String method = "destroy()";
if (log.isDebugEnabled()) {
log.debug(enter(method));
}
super.destroy();
if (log.isDebugEnabled()) {
log.debug(exit(method));
}
}
}