小工具知识网

当前位置: 首页 > 行业知识 > 基于若依升级spring boot到3.1.5版本

行业知识

基于若依升级spring boot到3.1.5版本

2026-11-09 17:33:09 来源:互联网转载

Spring Boot 3.x要求使用Java 17或更高版本,所以需要确保项目使用的Java版本符合要求。

1、修改pom.xml文件,version版本根据实际情况配置最新。

173.0.2  org.springframework.boot  spring-boot-dependencies  3.1.5  pom  import  org.mybatis.spring.boot  mybatis-spring-boot-starter  ${mybatis-spring-boot.version}  com.mysql  mysql-connector-j  8.1.0  javax.xml.bind  jaxb-api  2.3.1  jakarta.servlet  jakarta.servlet-api  6.0.0

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

com.mysqlmysql-connector-j

3、修改ruoyi-framework/pom.xml文件kaptcha依赖。

pro.fessionalkaptchaservlet-apijakarta.servlet

4、Java EE转Jakarta EE

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

将javax.xxxx替换成jakarta.xxxx,例如

javax.annotation 替换成 jakarta.validationjavax.servlet    替换成 jakarta.servletjavax.validation 替换成 jakarta.validationjavax.xxxxxxxxxx 替换成 jakarta.xxxxxxxxxx

注意代码生成模板controller.java.vm也需要换一下javax为jakarta。

但是有些原生方法是不需要去进行修改的,例如项目中的这几个方法,包不需要替换成jakarta.xxxx

import javax.imageio.ImageIO;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import javax.sql.DataSource

PS:如果嫌麻烦可以使用idea自带的转换功能

5、修改DruidConfig.java,添加数据库监听功能配置Bean。

package com.ruoyi.framework.config;public class DruidConfig{    .......    @Bean    public DruidStatProperties druidStatProperties()    {        return new DruidStatProperties();    }    .......}

6、修改PermitAllUrlProperties.java,以支持@Anonymous注解path_pattern_parser解析方式。

@Configurationpublic class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware{    .........    @Override    public void afterPropertiesSet()    {        RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);        Map map = mapping.getHandlerMethods();        map.keySet().forEach(info -> {            HandlerMethod handlerMethod = map.get(info);            // 获取方法上边的注解 替代path variable 为 *            Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class);            Optional.ofNullable(method).ifPresent(anonymous -> Objects.requireNonNull(info.getPathPatternsCondition().getPatternValues()) //                    .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK))));            // 获取类上边的注解, 替代path variable 为 *            Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class);            Optional.ofNullable(controller).ifPresent(anonymous -> Objects.requireNonNull(info.getPathPatternsCondition().getPatternValues())                    .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK))));        });    }    .........}

7、修改SecurityConfig.java,以支持Spring Security6新的配置方式。

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.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;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;/** * spring security配置 * * @author ruoyi */@EnableMethodSecurity(prePostEnabled = true, 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(csrf -> csrf.disable())                // 禁用HTTP响应标头                .headers(headersCustomizer -> headersCustomizer.cacheControl().disable())                // 认证失败处理类                .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler))                // 基于token,所以不需要session                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))                .headers(headers -> headers.cacheControl().disable())                // 注解标记允许匿名访问的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();    }}

8、修改application.yml的spring.redis配置为spring.data.redis

spring:  data:    redis:      ......

9、使用maven打包成jar包需要修改17版本

file->settings->maven->runner->jre->修改为17

10、打包问题

打包出现问题,前提是把Java Compiler 改为8.先clean 再compile 这时需要rebuild一下项目之后才可以package

上一篇:enoughadults怎么读?

下一篇:ourplay服务器繁忙怎么办?