Hi, Ben,
The auth exception object is referenced in the last line of the commence method:
Code:
public void commence(ServletRequest request, ServletResponse response,
AuthenticationException authException)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.addHeader("WWW-Authenticate",
"Basic realm=\"" + realmName + "\"");
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED,
authException.getMessage());
}
Here's the stack trace:
Code:
java.lang.NullPointerException
net.sf.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint.commence(BasicProcessingFilterEntryPoint.java:75)
com.perfretail.k2v1.webapp1.web.acegi.DelegatingAuthenticationEntryPoint.commence(DelegatingAuthenticationEntryPoint.java:84)
net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter.sendStartAuthentication(SecurityEnforcementFilter.java:253)
net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter.doFilter(SecurityEnforcementFilter.java:201)
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
net.sf.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:153)
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
net.sf.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:212)
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
net.sf.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:372)
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:217)
net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
net.sf.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:179)
net.sf.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:125)
And here's my delegating auth entry point (based on what your initial input):
Code:
import org.apache.log4j.Logger;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import net.sf.acegisecurity.AuthenticationException;
import net.sf.acegisecurity.intercept.web.AuthenticationEntryPoint;
import org.springframework.util.Assert;
public class DelegatingAuthenticationEntryPoint implements
AuthenticationEntryPoint {
/**
* Logger for this class
*/
private static final Logger logger = Logger
.getLogger(DelegatingAuthenticationEntryPoint.class);
// ~ Instance fields
// ========================================================
Map authenticationEntryPointMap;
// ~ Methods
// ================================================================
public void commence(ServletRequest request, ServletResponse response,
AuthenticationException authException) throws IOException,
ServletException {
if (logger.isDebugEnabled()) {
logger
.debug("commence(ServletRequest, ServletResponse, AuthenticationException) - start");
}
if (!(request instanceof HttpServletRequest)) {
throw new ServletException("only supports HttpServletRequest");
}
Assert.notNull(authenticationEntryPointMap,
"Required property authenticationEntryPointMap is null");
HttpServletRequest httpRequest = (HttpServletRequest) request;
String servletPath = httpRequest.getServletPath();
String extension = servletPath.substring(servletPath.lastIndexOf('.') + 1);
AuthenticationEntryPoint entryPoint = (AuthenticationEntryPoint) authenticationEntryPointMap
.get(extension);
// attempt to get wildcard entry point
if (entryPoint == null) {
entryPoint = (AuthenticationEntryPoint) authenticationEntryPointMap
.get("*");
}
if (entryPoint != null) {
entryPoint.commence(request, response, authException);
}
if (logger.isDebugEnabled()) {
logger
.debug("commence(ServletRequest, ServletResponse, AuthenticationException) - end");
}
}
public Map getAuthenticationEntryPointMap() {
return authenticationEntryPointMap;
}
public void setAuthenticationEntryPointMap(Map authenticationEntryPointMap) {
this.authenticationEntryPointMap = authenticationEntryPointMap;
}
}