spring3.2.3已经修复该bug
问题描述:
1、url可能是
http://localhost:9080/es-web/login
或一个以;开头的matrix变量
http://localhost:9080/es-web/login;JSESSIONID=a3595636-e414-4cff-bd37-a42edf53193d
2、控制器处理方法@RequestMapping匹配pattern写法
spring 3.1前,以下写法是没有问题的
@RequestMapping(value = {"/login"}, method = RequestMethod.GET) public String loginForm() { return "front/login"; }
自spring3.2引入@MatrixVariable来匹配如/category;domId=a这样模式,使用如上pattern匹配『/login;JSESSIONID=a3595636-e414-4cff-bd37-a42edf53193d』时就会报如下错误
写道
java.lang.IllegalStateException: Pattern "/login" is not a match for "/login;JSESSIONID=a3595636-e414-4cff-bd37-a42edf53193d"
at org.springframework.util.Assert.state(Assert.java:385)
at org.springframework.util.AntPathMatcher.extractUriTemplateVariables(AntPathMatcher.java:287)
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleMatch(RequestMappingInfoHandlerMapping.java:102)
at org.springframework.util.Assert.state(Assert.java:385)
at org.springframework.util.AntPathMatcher.extractUriTemplateVariables(AntPathMatcher.java:287)
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleMatch(RequestMappingInfoHandlerMapping.java:102)
3、解决方案
我们可以使用正则表达式解决
@RequestMapping(value = {"/{login:login;?.*}"}, method = RequestMethod.GET) public String loginForm() { return "front/login"; }
有朋友可能觉得如下也是可以的
1、@RequestMapping(value = {"/login", "/login;JSESSIONID=*"})
实际是不行的,因为再选择最佳匹配模式时,使用如下代码:
Set<String> patterns = info.getPatternsCondition().getPatterns(); String bestPattern = patterns.isEmpty() ? lookupPath : patterns.iterator().next();
即第一个。所以此时即使配置了两个,也永远选择"/login" (不管顺序如何);如果此处采用fallback也能搞定的。
2、修改spring源码,匹配时把『;……』,即分号及后边的去掉(spring3.1就是这么实现的)。
综上,在不修改源码的情况下,最简单的就是使用正则表达式模式/{login:login;?.*}
@MatrixVariable使用请参考
相关推荐
Spring 3.2 是该框架的一个重要版本,引入了许多改进和新特性。这份文档将深入探讨Spring 3.2的主要概念、功能和最佳实践。 1. **核心容器**:Spring的核心在于其IoC(Inversion of Control)和DI(Dependency ...
Spring 3.2 版本是该框架的一个重要里程碑,它在前几个版本的基础上进行了许多改进和优化,旨在提高开发效率、可维护性和性能。下面我们将详细探讨Spring 3.2框架的核心特性、主要模块以及它们如何协同工作。 首先...
最后,深入理解Spring源码不仅可以帮助你解决实际开发中的问题,还能让你更好地掌握Java企业级应用的开发技巧,为你的职业生涯增色添彩。因此,花时间研究这个源码jar包是非常值得的投资。祝你在学习Spring的道路...
个人觉得spring3.2的源代码比较好编译,没啥脾气,像我之前下载的spring的最新版本源代码,还有spring4.0的源代码,不论是使用jdk1.6还是1.7甚至是1.8编译都出问题,结果还是觉得spring3.2编译过程轻松一点,配合...
Spring 3.2 是一个重要的Java企业级框架,主要用于构建高度模块化和可维护的Java应用程序。这个版本的Spring框架提供了许多改进和新特性,旨在提高开发效率和应用的灵活性。在Spring 3.2中,主要包含了四个关键模块...
在实际开发中,使用这个“spring3.2最全jar包”可以确保你拥有所有必要的库,避免了因为缺少某个jar而引发的类加载问题。同时,这个版本也考虑到了与其他开发工具的兼容性,使得开发过程更加顺畅。
Spring 3.2 是该框架的一个重要版本,它提供了许多增强的功能和改进,为开发者提供了更高效、更灵活的开发体验。本篇文章将深入探讨Spring 3.2 jar包中的关键知识点及其在J2EE开发中的应用。 首先,Spring的核心...
Spring 3.2 版本是该框架的一个重要里程碑,引入了许多增强功能和改进。在这个版本中,开发者可以深入理解 Spring 的工作原理,从而更好地利用其特性来优化应用程序。 首先,Spring 3.2 对于核心容器(Core ...
通过下载的"spring-framework-3.2.x"压缩包,开发者可以在Eclipse中直接导入项目,查看Spring框架的源代码实现,深入理解其设计理念和工作原理,这对于提升个人技能和解决实际问题都大有裨益。同时,这也为自定义...
spring3.2框架是一个轻量级的解决方案和一个潜在的 一站式为构建企业级应用程序。 然而, spring是模块化的,允许你只使用那些你需要的部分, 无需引入其余。 您可以使用IoC容器, Struts在上,但是你也可以只使用 ...
在提供的文件内容中,我们可以提取出关于Spring3.2框架的详细知识点。Spring是一个开源的Java/Java EE全功能栈的应用程序框架,它通过提供一系列的工具和库来简化Java应用的开发。文件内容涉及了Spring框架的多个...
spring3.2 源码编译后需要的jar,spring3.2 源码编译后需要的jar,spring3.2 源码编译后需要的jar
spring3.2-api.chm格式,本人在网上找了好多chm格式的,都不正常现在,没有办法自己找了一个工具打包成chm格式
spring3.2 源码编译后需要的jar,spring3.2 源码编译后需要的jar,spring3.2 源码编译后需要的jar
Spring框架是Java开发中最常用的轻量级框架之一,它的3.2版本因其稳定性和广泛的社区支持而备受青睐。本文将深入探讨Spring 3.2源码中的关键知识点,旨在帮助开发者更好地理解其工作原理,提升代码质量与效率。 ...
通过深入研究 Spring 3.2 源码,开发者可以更好地理解 Spring 框架的内部机制,从而更高效地利用其功能,解决实际开发中的问题。同时,这也为学习更高级的 Spring 版本,如 Spring Boot 或 Spring Cloud 打下了坚实...
在Spring 3.2中,MVC框架进行了性能优化,支持了更高效的路径匹配和参数解析,同时还增加了对RESTful风格的URL处理支持,提升了Web应用的可维护性和扩展性。 除此之外,Spring 3.2还强化了AOP(面向切面编程)支持...
在下载的"spring3.2"压缩包中,通常包含所有必需的Spring 3.2核心库以及相关模块的jar文件,例如spring-core、spring-context、spring-aop、spring-webmvc等。开发者可以根据具体项目需求选择导入相应的jar包。虽然...