首页 > 其他分享 >若依升级spring boot3过程

若依升级spring boot3过程

时间:2023-02-21 00:12:46浏览次数:49  
标签:spring springframework 若依 boot3 import org security

一、为何要升级到spring boot3?

因为新发布的spring boot3本身就支持spring native了,意味着可以用更小的内存和更快的启动速度,而更小的内存意味着服务器可以运行更多的项目,节约成本。所以第一步,先升级到spring boot3,不要再用之前旧的低于spring boot3版本的方式去实现spring native了。本文以若依前后端分离单体版为演示版本。

二、升级步骤

1、安装jdk17
低版本jdk不支持,必须至少采用jdk17

https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe
2、下载若依

https://github.com/yangzongzhuan/RuoYi-Vue-fast

3、导入项目,修改jdk
idea需用2022.2或更高版本

先修改pom文件spring boot版本,改为3.0.2

然后再导入

最后修改jdk版本,怎么修改jdk就不赘述了

4、javaee转jakara

使用idea自带的转换功能

 

 

5、再次修改pom

这时候会有一些报错,需要修改pom

 fork配置注释掉

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
       <!-- <fork>true</fork>  如果没有该配置,devtools不会生效 -->
    </configuration>
</plugin>

缺失javax.xml.bing,则添加依赖

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

6、spring boot3对应的spring security6,需采用新的配置方式,

SecurityConfig.java文件改为以下,且路径通配符**需改为*

package com.ruoyi.framework.config;

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.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
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;

/**
 * spring security配置
 *
 * @author ruoyi
 */
@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true)
@Configuration
public class SecurityConfig
{
    /**
     * 自定义用户认证逻辑
     */
    @Autowired
    private UserDetailsService userDetailsService;

    /**
     * 认证失败处理类
     */
    @Autowired
    private AuthenticationEntryPointImpl unauthorizedHandler;

    /**
     * 退出处理类
     */
    @Autowired
    private LogoutSuccessHandlerImpl logoutSuccessHandler;

    /**
     * token认证过滤器
     */
    @Autowired
    private JwtAuthenticationTokenFilter authenticationTokenFilter;

    /**
     * 跨域过滤器
     */
    @Autowired
    private CorsFilter corsFilter;

    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
    }


    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {

        httpSecurity
                // CSRF禁用,因为不使用session
                .csrf().disable()
                // 禁用HTTP响应标头
                .headers().cacheControl().disable().and()
                // 认证失败处理类
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                // 基于token,所以不需要session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                // 过滤请求
                .authorizeRequests()
                // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                .requestMatchers("/login", "/register", "/captchaImage").permitAll()
                // 静态资源,可匿名访问
                .requestMatchers(HttpMethod.GET, "/", "/*.html", "/*/*.html", "/*/*.css", "/*/*.js", "/profile/*").permitAll()
                .requestMatchers("/swagger-ui.html", "/swagger-resources/*", "/webjars/*", "/*/api-docs", "/druid/*").permitAll()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
        // 添加Logout filter
        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        // 添加JWT filter
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
        // 添加CORS filter
        httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);

        return httpSecurity.build();
    }
    /**
     * 强散列哈希加密实现
     */
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
        return new BCryptPasswordEncoder();
    }

    /**
     * 身份认证接口
     */
    protected void configure(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
    }
}

7、关闭com.alibaba.druid数据库监听功能

这玩意有安全隐患,漏扫会报告,感觉用处不大,而且启动也报错误,application-druid.yml相关配置改为false即可

statViewServlet:
    enabled: false

8、再次修改pom
此时可尝试启动,若启动失败,报mybatis相关错误,则需要将mybatis-spring-boot-starter升级到最新版本,默认版本不支持spring boot3

升级到

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.1</version>
</dependency>

9、启动

没有意外的话就没有意外了,可以启动成功,然后下载前端项目,运行访问后台。

10、后续

spring native打包测试。

标签:spring,springframework,若依,boot3,import,org,security
From: https://www.cnblogs.com/srszzw/p/17138007.html

相关文章

  • SpringBoot02 - 基础配置
    SpringBoot基础配置1.属性配置​ SpringBoot通过配置文件application.properties就可以修改默认的配置,那咱们就先找个简单的配置下手,当前访问tomcat的默认端口是8080,好熟......
  • SpringBoot03 - 整合JUnit
    整合JUnit​ SpringBoot技术的定位用于简化开发,再具体点是简化Spring程序的开发。所以在整合任意技术的时候,如果你想直观感触到简化的效果,你必须先知道使用非SpringBoot技......
  • SpringBoot04 - 整合MyBatis
    整合MyBatis​ 整合完JUnit下面再来说一下整合MyBatis,这个技术是大部分公司都要使用的技术,务必掌握。如果对Spring整合MyBatis不熟悉的小伙伴好好复习一下,下面列举出原始......
  • SpringBoot01 - 入门案例
    1.SpringBoot入门程序制作(一)​ 下面让我们开始做第一个SpringBoot程序吧,本课程基于Idea2020.3版本制作,使用的Maven版本为3.6.1,JDK版本为1.8。如果你的环境和上述环境不同,......
  • day15-SpringMVC执行流程
    SpringMVC执行流程1.SpringMVC执行流程分析图例子(1)创建HaloHandlerpackagecom.li.web.debug;importorg.springframework.stereotype.Controller;importorg.s......
  • MyBatisPlus(springBoot版)-尚硅谷
    Pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • springBoot项目遇到的BUG:Process finished with exit code -1
     问题原因:在service层调用dao层的时候没有给接口注入值 解决方法:加上@Autowired ......
  • springBoot简要复习总结
    SpringBootSpringBoot的特点1.独立运行的Spring项目SpringBoot可以以jar包的形式独立运行,SpringBoot项目只需通过命令“java–jarxx.jar”即可运行。2.......
  • Spring-AOP
    AOP被称为面向切面编程。对单个对象(一对一)的解耦用IOC,而当有个共通组件,它对应多个其他组件(一对多),则解耦用AOP。如,拦截器。这也是为何在程序中大量的用IoC,而AOP却用的很少......
  • SpringBoot的开启缓存@EnableCaching 和 使用缓存@Cacheable
    springboot中的缓存注解支持Spel表达式,因此这里展示常用的SpEL表达式1、开启缓存@EnableCachingimportorg.springframework.boot.SpringApplication;importorg.sp......