Page 1 of 1

[Workaround]NPE in onAuthenticationSuccess at login

Posted: Mon Dec 10, 2012 3:59 pm
by pokemon007
I hit this error during login:

Code: Select all

java.lang.NullPointerException
   java.util.Hashtable.get(Hashtable.java:334)
   org.apache.tomcat.util.http.Parameters.getParameterValues(Parameters.java:194)
   org.apache.tomcat.util.http.Parameters.getParameter(Parameters.java:239)
   org.apache.catalina.connector.Request.getParameter(Request.java:1042)
   org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:355)
   javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158)
   org.broadleafcommerce.core.web.order.security.BroadleafAuthenticationSuccessHandler.onAuthenticationSuccess(BroadleafAuthenticationSuccessHandler.java:41)
   org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.successfulAuthentication(AbstractAuthenticationProcessingFilter.java:323)
   org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.successfulAuthentication(AbstractAuthenticationProcessingFilter.java:288)
   org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:213)
   org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
   org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
   org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
   org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
   org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
   org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:144)
   org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
   org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
   org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
   org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
   org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147)
   org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


The user has been logged in successfully and can access account, but following line marked with "-->" in BroadleafAuthenticationSuccessHandler's onAuthenticationSuccess causes NullPointerException:

Code: Select all

@Component("blAuthenticationSuccessHandler")
public class BroadleafAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {
        mergeCartProcessor.execute(request, response, authentication);
       
--->        String targetUrl = request.getParameter(getTargetUrlParameter());

    }
}


By default targetUrlParameter is null. How can I avoid it?

Thank you!

-Charlie

Re: NPE in onAuthenticationSuccess at login

Posted: Thu Dec 13, 2012 10:58 pm
by pokemon007
Not sure if I'm the only one that encounter this problem. My workaround is to use my own AuthenticationSuccessHandler and do not call request.getParameter if getTargetUrlParameter is NULL which means regular login:

Code: Select all

public class AuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    @Resource(name="blMergeCartProcessor")
    private MergeCartProcessor mergeCartProcessor;

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {
        mergeCartProcessor.execute(request, response, authentication);
       
        String urlParam = getTargetUrlParameter();
        if (StringUtils.hasText(urlParam)) {
            String targetUrl = request.getParameter(urlParam);
            if (StringUtils.hasText(targetUrl) && targetUrl.contains(":")) {
                getRedirectStrategy().sendRedirect(request, response, getDefaultTargetUrl());
            }           
        }
        super.onAuthenticationSuccess(request, response, authentication);
    }
}


I thought this is a bug. Or am I doing something else wrong?

Thanks.

-Charlie