I'm trying to refactor spring-social-security code, and find that in order to use AbstractAuthenticationProcessingFilter, I need to add code in its doFilter() method to handle redirect.
So I added an AuthenticationRedirectException class:
And changed doFilter() to catch the exception:Code:public class AuthenticationRedirectException extends AuthenticationException{ private final String redirectUrl; public AuthenticationRedirectException(URL redirectUrl) { this(redirectUrl.toString()); } public AuthenticationRedirectException(String redirectUrl) { super(""); this.redirectUrl = redirectUrl; } public String getRedirectUrl() { return redirectUrl; } }
Please let me know if above code changes are appropriate.Code:public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; if (!requiresAuthentication(request, response)) { chain.doFilter(request, response); return; } if (logger.isDebugEnabled()) { logger.debug("Request is to process authentication"); } Authentication authResult; try { authResult = attemptAuthentication(request, response); if (authResult == null) { // return immediately as subclass has indicated that it hasn't completed authentication return; } sessionStrategy.onAuthentication(authResult, request, response); } catch (AuthenticationRedirectException e) { response.sendRedirect(e.getRedirectUrl()); return; } catch(InternalAuthenticationServiceException failed) { logger.error("An internal error occurred while trying to authenticate the user.", failed); unsuccessfulAuthentication(request, response, failed); return; } catch (AuthenticationException failed) { // Authentication failed unsuccessfulAuthentication(request, response, failed); return; } // Authentication success if (continueChainBeforeSuccessfulAuthentication) { chain.doFilter(request, response); } successfulAuthentication(request, response, chain, authResult); }
Thanks.


Reply With Quote
