You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Spring Web MVC 6.2.5后RequestDataValueProcessor实现类编译报错求助

问题:Spring Web MVC升级后RequestDataValueProcessor实现类编译报错

问题概述

为修复漏洞将Spring Web MVC从5.3.22版本升级至6.2.5版本后,编译应用时出现以下错误:

error: CSRFRequestDataValueProcessor is not abstract and does not override abstract method processUrl(HttpServletRequest,String) in RequestDataValueProcessor
public class CSRFRequestDataValueProcessor implements RequestDataValueProcessor {
error: method does not override or implement a method from a supertype
[javac]  @Override

该错误在Spring Web MVC 5.3.22版本中未出现,且代码已实现RequestDataValueProcessor接口的所有方法,代码如下:

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.servlet.support.RequestDataValueProcessor;


public class CSRFRequestDataValueProcessor implements RequestDataValueProcessor {


    @Override
    public String processFormFieldValue(HttpServletRequest request, String name, String value, String type) {
        return value;
    }

    @Override
    public Map<String, String> getExtraHiddenFields(HttpServletRequest request) {
        Map<String, String> hiddenFields = new HashMap<String, String>();
        hiddenFields.put(CSRFTokenManager.CSRF_PARAM_NAME, CSRFTokenManager.getTokenForSession(request.getSession()));
        return hiddenFields;
    }

    @Override
    public String processUrl(HttpServletRequest request, String url) {
        return url;
    }

    
    @Override
    public String processAction(HttpServletRequest request, String action,String httpMethod) {
        return action;
    }

}

项目当前依赖的相关Spring包:

  • spring-security-config-5.7.2
  • spring-security-core-5.7.2
  • spring-security-web-5.7.2
  • spring-integration-security-5.5.14
  • spring.web.servlet-3.1.1

问题原因

  1. Jakarta EE 迁移不兼容:Spring Web MVC 6.x基于Jakarta EE 9+规范,所有javax.servlet相关API已替换为jakarta.servlet包,而代码仍在使用旧的javax.servlet.http.HttpServletRequest,导致与Spring 6.x中RequestDataValueProcessor接口的方法签名不匹配,编译器判定未正确实现接口方法。
  2. 依赖版本冲突:项目中存在旧版spring.web.servlet-3.1.1依赖,会引入旧的javax.servlet类,与Spring 6.x的jakarta.servlet类产生类路径冲突。
  3. Spring生态版本不匹配:Spring Security 5.7.x与Spring 6.x不兼容,Spring 6.x需要搭配Spring Security 6.0+版本,版本错位会进一步加剧类定义冲突。

解决方案

  1. 修改代码导入包
    将代码中的import javax.servlet.http.HttpServletRequest;替换为:

    import jakarta.servlet.http.HttpServletRequest;
    
  2. 清理冲突依赖
    移除旧版spring.web.servlet-3.1.1依赖,Spring Web MVC 6.2.5已包含对应的web模块,无需单独引入旧版依赖。

  3. 升级Spring生态依赖版本
    将Spring Security及Spring Integration相关依赖升级至适配Spring 6.x的版本(建议与Spring Web MVC版本保持一致,即6.2.5):

    • spring-security-config-6.2.5
    • spring-security-core-6.2.5
    • spring-security-web-6.2.5
    • spring-integration-security-6.2.5
  4. 确认Servlet API依赖
    确保项目中引入的是Jakarta EE的Servlet API(版本5.0+),替换原有的javax.servlet相关依赖,例如Maven中可引入:

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>
    

内容的提问来源于stack exchange,提问作者RithanyaLaxmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:40:18