Spring框架升级后出现请求映射冲突问题求助
问题根源
你遇到的映射冲突,本质是同一个控制器类被创建了两个Bean实例:
- 一个是Spring通过组件扫描,识别
LoginController上的@Controller注解自动生成的loginControllerBean; - 另一个是你在
ApplicationContext-security.xml里手动配置的customUserDetailsService2Bean,它的class指定为LoginController。
这两个实例都带有相同的请求映射方法(比如loginRedirect(ModelMap)),Spring新版本对请求映射的唯一性校验更严格,所以直接抛出了Ambiguous mapping错误。旧版本Spring可能没有强制执行这个校验,因此之前能正常运行。
修复方案
职责分离,避免控制器兼任UserDetailsService
UserDetailsService的核心职责是处理用户认证的数据源逻辑,而控制器负责请求转发和视图渲染,两者职责完全不同。你应该创建一个独立的类实现UserDetailsService接口,把认证相关逻辑移到这个类里,然后在ApplicationContext-security.xml中配置这个新类作为customUserDetailsService2的Bean。移除重复的Bean定义
删掉ApplicationContext-security.xml中class为LoginController的customUserDetailsService2配置,确保LoginController只有一个实例(由@Controller注解自动创建)。验证组件扫描范围
检查Spring的组件扫描配置,确保没有重复扫描LoginController所在的包,避免意外创建多个实例。
内容的提问来源于stack exchange,提问作者MonkeySleeve
相关产品推荐
相关产品推荐

