Spring-MVC 3.2 to 4.1 Upgrade: @RequestParam Not Binding



我正在从Spring 3.2升级到4.1,并尝试更新我的MVC配置。

短版本:我可以确认请求发送的参数:

userId:USERNAME
password:PASSWORD
termsAccepted:true

内容类型为application/x-www-form-urlencoded

Spring Security CSRF已禁用:<security:csrf disabled="true"/>

看看XSD,它说我的自定义方法参数解析器不会覆盖默认的方法参数解析器:

<mvc:annotation-driven >
<mvc:argument-resolvers>
<bean class="org.jason.web.util.RetainUserHandlerMethodArgumentResolver"/>
<bean class="org.jason.web.util.ConversationArgumentResolver"/>
</mvc:argument-resolvers>
<mvc:message-converters>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>

有人能提供一些见解吗?

编辑:这是控制器。这里没什么特别的。

@RequestMapping(value = "/login**")
public ModelAndView login(@RequestParam(value = "error", required = false) String error,
@RequestParam(value = "logout", required = false) String logout,
@RequestParam(value = "submit", required = false) String submit,
@RequestParam(value = "userId", required = false) String userId,
@RequestParam(value = "password", required = false) String password,
@RequestParam(value = "returnView", required = false) String returnView,
HttpServletRequest request,
HttpSession session
) {
// login log. Return a Spring ModelAndView based on success/failure.
}

作为升级的一部分,您还将Spring Security升级到了4.1。在3.2和4.x之间,/j_spring_security_check的默认登录url更改为/login。(请参见https://github.com/spring-projects/spring-security/issues/3010)。

现在,Spring Security有效地处理了对/login的请求,并且您的控制器最终由于身份验证失败而接收到重定向(由于它是一个新的空请求,因此不包含原始参数)。

最新更新