当我使用自定义SuccessHandler尝试Http POST或Http PUT时,我不断收到Http 400错误。具体地说,在我转发请求之后,会出现错误。我将请求转发如下:
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
String context = request.getContextPath();
String fullURL = request.getRequestURI();
String url = fullURL.substring(fullURL.indexOf(context)
+ context.length());
request.getRequestDispatcher(url).include(request, response);
request.getRequestDispatcher(url).forward(request, response);
}
我的任何其他不包括RequestBody的调用都不会产生Http400错误。可能是什么问题?
由于请求调度器在同一服务器上为servlet工作,请尝试request.getRequestDispatcher(conetext)。。。其中"context"是您在服务器上前进的相对目标,即/webapp/login参见
- http://docs.oracle.com/javaee/7/api/javax/servlet/ServletRequest.html#getRequestDispatcher%28java.lang.String%29
- http://www.jguru.com/faq/view.jsp?EID=206736
显然我不理解RequestDispatcher的include
和forward
方法。通过移除request.getRequestDispatcher(url).forward(request, response);
,我让它开始工作。有关原因的解释,请访问:http://www.theserverside.com/tip/Include-vs-Forward-of-the-Servlet-RequestDispatcher.