package ee.esutoniagodesu.security.social; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; import org.springframework.social.security.SocialAuthenticationFailureHandler; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; /** * An AuthenticationFailureHandler that replaces Spring's */ public class SocialLoginExceptionMapper extends SimpleUrlAuthenticationFailureHandler { private static final Logger log = LoggerFactory.getLogger(SocialLoginExceptionMapper.class); private final static String DELEGATED = "SocialLoginRejectedFailureHandler.delegated"; protected Map<Class<? extends AuthenticationException>, String> map = new HashMap<>(); protected SocialAuthenticationFailureHandler delegate = new SocialAuthenticationFailureHandler(this); public SocialLoginExceptionMapper(String defaultFailureUrl) { log.debug("New SocialLoginExceptionMapper {}", defaultFailureUrl); super.setDefaultFailureUrl(defaultFailureUrl); } @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException { log.debug("onAuthenticationFailure: " + e.getMessage(), e); System.out.println("getContextPath " + request.getContextPath()); System.out.printf("getPathInfo " + request.getPathInfo()); System.out.println("getHeaderNames " + request.getHeaderNames()); System.out.printf("getRemoteUser " + request.getRemoteUser()); System.out.println("request " + request.toString()); Enumeration<String> a = request.getAttributeNames(); while (a.hasMoreElements()) { System.out.println("nextelement " + a.nextElement()); } if (request.getAttribute(DELEGATED) == null) { System.out.println("stsena 1 boot"); request.setAttribute(DELEGATED, Boolean.TRUE); delegate.onAuthenticationFailure(request, response, e); } else if (map.containsKey(e.getClass())) { System.out.println("stsena 2"); String url = map.get(e.getClass()); super.getRedirectStrategy().sendRedirect(request, response, url); } else { System.out.println("stsena 3 tomcat"); super.onAuthenticationFailure(request, response, e); } } public SocialLoginExceptionMapper add(Class<? extends AuthenticationException> clazz, String url) { log.debug("add: {}, {}", clazz, url); map.put(clazz, url); return this; } }