2012-10-23 96 views
1

我有一个登录表单以前看起来像下面POST不支持

<div class="span-10 last"> 
    <c:url value="/j_spring_security_check" var="loginActionUrl" /> 
    <user:login actionNameKey="login.login" action="${loginActionUrl}"/> 
</div> 

,但现在我改变了形式看起来像下面。

<div class="span-10 last"> 
    <c:url value="/login/loginNow" var="loginActionUrl" /> 
    <user:login actionNameKey="login.login" action="${loginActionUrl}"/> 
</div> 

我的控制器看起来像现在这样

@Controller 
@RequestMapping(value = "/login") 
public class LoginPageController { 
    @RequestMapping(value = "/loginNow", method = RequestMethod.POST) 
    public String doLogin(
     @RequestHeader(value = "referer", required = false) final String referer, 
     @Valid final LoginForm loginForm, final BindingResult bindingResult, 
     final Model model, final HttpServletRequest request, 
     final HttpServletResponse response) throws CMSItemNotFoundException { 

     if (somethingMissing) { 
      return to login page. 
     } 

     return FORWARD_PREFIX + "/j_spring_security_check"; 

    } 
} 

但不支持现在我收到请求POST方法。我不知道为什么..?我怎样才能纠正错误.. 感谢

+0

你确认你的JSP调用正确的控制器方法?使用FF萤火(或同等)看页面的击球URL。请问如果更改接受GET和自行测试URL的方式工作?最后,如果您正在使用Tomcat尝试删除工作目录和重启动Tomcat的 - 有时它使类文件的旧版本中存在导致奇怪的行为。 – nickdos

+0

是的,我已经把日志行..我很确定它转到正确的控制器。我从这个网址得到的是你已经把 FORWARD springSecurityFilterChain从您的controller.But转发它现在它的转发控制器与j_spring_security_check但不知何故,表单对象是失去了在转发技术,所以我即使凭据正确,也可以再次登录登录页面。所以我只是model.addAttribute(loginForm);然后将其转发给j_spring_security_check。现在 –

+0

我测试它,我不知道应该怎么办了request.setAttribute(“为j_username”,form.getUsername())类似的东西在转发之前j_spring_security_check。 –

回答

1

你需要把这个web.xml上

<filter> 
    <filter-name>httpMethodFilter</filter-name> 
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>httpMethodFilter</filter-name> 
    <servlet-name>yourServlet</servlet-name> 
</filter-mapping>