小工具知识网

当前位置: 首页 > 行业知识 > 若依框架升级SpringBoot3

行业知识

若依框架升级SpringBoot3

2026-11-13 04:57:43 来源:互联网转载

文章目录

  • 前言
  • 一、修改父项目pom.xml
  • 二、修改ruoyi-admin/pom.xml文件mysql依赖
  • 三、修改ruoyi-framework/pom.xml文件
  • 四、修改ruoyi-common/pom.xml文件
  • 五、修改ruoyi-generator/pom.xml文件
  • 六、修改DruidConfig类
  • 七、修改SecurityConfig类
  • 八、Java EE转Jakarta EE
  • 九、解决前端调用了使用@PathVariable接收参数的接口报错的问题
  • 总结

    前言

    若依官网给出的修改步骤,自己在实际操作过程中发现有部分缺失,无法正常启动。在经过网上查阅资料后进行添加可以重启升级。

    注意:先将所有的pom文件修改完成再刷新,否则会出现找不到依赖的错误。如果出现,继续将所有pom文件的内容修改好再刷新。


    一、修改父项目pom.xml

    17org.springframework.bootspring-boot-dependencies3.2.5pomimport    com.alibaba    druid-spring-boot-3-starter    1.2.21    javax.xml.bind    jaxb-api    2.3.1    jakarta.servlet    jakarta.servlet-api    6.0.0    com.baomidou    mybatis-plus-boot-starter    3.5.5    com.mysql    mysql-connector-j    8.1.0

    二、修改ruoyi-admin/pom.xml文件mysql依赖

    com.mysqlmysql-connector-j

    三、修改ruoyi-framework/pom.xml文件

    pro.fessionalkaptchaservlet-apijakarta.servlet    com.alibaba    druid-spring-boot-3-starter

    四、修改ruoyi-common/pom.xml文件

    jakarta.servletjakarta.servlet-api    com.baomidou    mybatis-plus-boot-starter    org.mybatis    mybatis-spring    3.0.3

    五、修改ruoyi-generator/pom.xml文件

        com.alibaba    druid-spring-boot-3-starter

    六、修改DruidConfig类

    将引入的Druid改为boot3

    import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceBuilder;import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties;

    七、修改SecurityConfig类

    package com.ruoyi.framework.config;import com.ruoyi.framework.config.properties.PermitAllUrlProperties;import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.HttpMethod;import org.springframework.security.authentication.AuthenticationManager;import org.springframework.security.authentication.ProviderManager;import org.springframework.security.authentication.dao.DaoAuthenticationProvider;import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;import org.springframework.security.config.http.SessionCreationPolicy;import org.springframework.security.core.userdetails.UserDetailsService;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import org.springframework.security.web.SecurityFilterChain;import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;import org.springframework.security.web.authentication.logout.LogoutFilter;import org.springframework.web.filter.CorsFilter;/** * spring security配置 * * @author ruoyi */@EnableMethodSecurity(securedEnabled = true)@Configurationpublic class SecurityConfig {    /**     * 自定义用户认证逻辑     */    @Autowired    private UserDetailsService userDetailsService;    /**     * 认证失败处理类     */    @Autowired    private AuthenticationEntryPointImpl unauthorizedHandler;    /**     * 退出处理类     */    @Autowired    private LogoutSuccessHandlerImpl logoutSuccessHandler;    /**     * token认证过滤器     */    @Autowired    private JwtAuthenticationTokenFilter authenticationTokenFilter;    /**     * 跨域过滤器     */    @Autowired    private CorsFilter corsFilter;    /**     * 允许匿名访问的地址     */    @Autowired    private PermitAllUrlProperties permitAllUrl;    /**     * @return     * @throws Exception     */    @Bean    AuthenticationManager authenticationManager() {        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();        // 身份认证接口        daoAuthenticationProvider.setUserDetailsService(userDetailsService);        daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder());        return new ProviderManager(daoAuthenticationProvider);    }    /**     * anyRequest | 匹配所有请求路径     * access | SpringEl表达式结果为true时可以访问     * anonymous | 匿名可以访问     * denyAll | 用户不能访问     * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录)     * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问     * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问     * hasAuthority | 如果有参数,参数表示权限,则其权限可以访问     * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问     * hasRole | 如果有参数,参数表示角色,则其角色可以访问     * permitAll | 用户可以任意访问     * rememberMe | 允许通过remember-me登录的用户访问     * authenticated | 用户登录后可访问     */    @Bean    SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {        return httpSecurity                // CSRF禁用,因为不使用session                .csrf(AbstractHttpConfigurer::disable)                // 禁用HTTP响应标头                .headers(header -> header.cacheControl(HeadersConfigurer.CacheControlConfig::disable).frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))                // 认证失败处理类                .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler))                // 基于token,所以不需要session                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))                // 注解标记允许匿名访问的url                .authorizeHttpRequests((requests) -> {                    permitAllUrl.getUrls().forEach(url -> requests.requestMatchers(url).permitAll());                    // 对于登录login 注册register 验证码captchaImage 允许匿名访问                    requests.requestMatchers("/login", "/register", "/captchaImage").permitAll()                            // 静态资源,可匿名访问                            .requestMatchers(HttpMethod.GET, "/", "/*.html", "/**.html", "/**.css", "/**.js", "/profile/**").permitAll()                            .requestMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/*/api-docs/**", "/druid/**").permitAll()                            // 除上面外的所有请求全部需要鉴权认证                            .anyRequest().authenticated();                })                // 添加Logout filter                .logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler))                // 添加JWT filter                .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)                // 添加CORS filter                .addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class)                .addFilterBefore(corsFilter, LogoutFilter.class).build();    }    /**     * 强散列哈希加密实现     */    @Bean    public BCryptPasswordEncoder bCryptPasswordEncoder() {        return new BCryptPasswordEncoder();    }}

    八、Java EE转Jakarta EE

    Spring Boot 3.0将所有底层依赖项从Java EE迁移到了Jakarta EE,会对一些使用了Java EE的方法造成影响,需要进行相应的修改和调整

    javax.annotation 替换成 jakarta.validationjavax.servlet    替换成 jakarta.servletjavax.validation 替换成 jakarta.validation#代码生成模板controller.java.vm也需要换一下javax为jakarta

    九、解决前端调用了使用@PathVariable接收参数的接口报错的问题

    java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the ‘-parameters’ flag.

    解决办法:指定接收参数名,如@PathVariable(“dictType”)或者@PathVariable(name = “dictType”)

    // 调用这个接口会报错@GetMapping(value = "/type/{dictType}")public AjaxResult dictType(@PathVariable String dictType){    List data = dictTypeService.selectDictDataByType(dictType);    if (StringUtils.isNull(data))    {        data = new ArrayList();    }    return success(data);}// 修改之后@GetMapping(value = "/type/{dictType}")public AjaxResult dictType(@PathVariable("dictType") String dictType){    List data = dictTypeService.selectDictDataByType(dictType);    if (StringUtils.isNull(data))    {        data = new ArrayList();    }    return success(data);}

    总结

上一篇:基础算法(三)#蓝桥杯

下一篇:h1z1哪里选择服务器?