文章目录
- 前言
- 一、修改父项目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
17 org.springframework.boot spring-boot-dependencies 3.2.5 pom import 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.mysql mysql-connector-j 三、修改ruoyi-framework/pom.xml文件
pro.fessional kaptcha servlet-api jakarta.servlet com.alibaba druid-spring-boot-3-starter 四、修改ruoyi-common/pom.xml文件
jakarta.servlet jakarta.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) @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; /** * 允许匿名访问的地址 */ @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.validation javax.servlet 替换成 jakarta.servlet javax.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); }
总结
还没有评论,来说两句吧...