https://faxue.inmoke.com

替代path variable 为 *Anonymous controller AnnotationUtils.fin

PATTERN,。

/swagger-ui/**, securedEnabled true)Configurationpublic class SecurityConfig{/*** 自定义用户认证逻辑*/Autowiredprivate UserDetailsService userDetailsService;/*** 认证失败处理类*/Autowiredprivate AuthenticationEntryPointImpl unauthorizedHandler;/*** 退出处理类*/Autowiredprivate LogoutSuccessHandlerImpl logoutSuccessHandler;/*** token认证过滤器*/Autowiredprivate JwtAuthenticationTokenFilter authenticationTokenFilter;/*** 跨域过滤器*/Autowiredprivate CorsFilter corsFilter;/*** 允许匿名访问的地址*/Autowiredprivate PermitAllUrlProperties permitAllUrl;/*** 身份验证实现*/Beanpublic 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| 用户登录后可访问*/Beanprotected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception{return httpSecurity// CSRF禁用因为不使用session.csrf(csrf - csrf.disable())// 禁用HTTP响应标头.headers((headersCustomizer) - {headersCustomizer.cacheControl(cache - cache.disable()).frameOptions(options - options.sameOrigin());})// 认证失败处理类.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, PATTERN, 一、修改父项目pom.xmlpropertiesjava.version17/java.versionspring-framework.version6.1.11/spring-framework.versionspring-security.version6.3.1/spring-security.version/properties!-- spring-boot版本2.5.15更换为3.2.5 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion3.2.5/versiontypepom/typescopeimport/scope/dependency!-- 阿里数据库连接池修改boot-3 --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-3-starter/artifactIdversion1.2.21/version/dependency!-- 新增四个配置依赖 --!-- Jaxb --dependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependency!-- servlet --dependencygroupIdjakarta.servlet/groupIdartifactIdjakarta.servlet-api/artifactIdversion6.0.0/version/dependency!-- mybatis-plus --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.5/version/dependency!-- mysql --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdversion8.1.0/version/dependencybuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.1/versionconfigurationsource${java.version}/sourcetarget${java.version}/targetencoding${project.build.sourceEncoding}/encodingcompilerArgsarg-parameters/arg/compilerArgs/configuration/plugin/plugins/build二、修改ruoyi-admin目录下的pom.xml!-- Mysql驱动包 --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactId/dependency三、修改ruoyi-framework目录下的pom.xml!-- 验证码 --dependencygroupIdpro.fessional/groupIdartifactIdkaptcha/artifactIdexclusionsexclusionartifactIdservlet-api/artifactIdgroupIdjakarta.servlet/groupId/exclusion/exclusions/dependency!-- 阿里数据库连接池 --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-3-starter/artifactId/dependency四、修改ruoyi-common目录下的pom.xml!-- 修改 servlet包 --dependencygroupIdjakarta.servlet/groupIdartifactIdjakarta.servlet-api/artifactId/dependency!-- 添加 mybatis-plus --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactId/dependency!-- 添加 mybatis-spring --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion3.0.3/version/dependency五、修改ruoyi-generator目录下的pom.xml!-- 阿里数据库连接池 --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-3-starter/artifactId/dependency六、修改DruidConfig.java// 原版本的引入import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;// 替换为import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceBuilder;import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties;七、使用开发工具全局替换javax.annotation 替换成 jakarta.annotationjavax.servlet 替换成 jakarta.servletjavax.validation 替换成 jakarta.validation#代码生成模板controller.java.vm也需要换一下javax为jakarta# 如IDEA 的全局替换快捷键是 CTRLSHIFTR八、修改SecurityConfig.java(这里文件全部复制粘贴我的就行)package com.ruoyi.framework.config;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, /druid/**).permitAll()// 除上面外的所有请求全部需要鉴权认证.anyRequest().authenticated();})// 添加Logout filter.logout(logout - logout.logoutUrl(/logout).logoutSuccessHandler(logoutSuccessHandler))// 添加JWT filter.addFilterBefore(authenticationTokenFilter, Anonymous.class);Optional.ofNullable(method).ifPresent(anonymous - Objects.requireNonNull(info.getPathPatternsCondition().getPatternValues()) //.forEach(url - urls.add(RegExUtils.replaceAll(url, ApplicationContextAware {private static final Pattern PATTERN Pattern.compile(\\{(.*?)\\});private ApplicationContext applicationContext;private ListString urls new ArrayList();public String ASTERISK *;Overridepublic void afterPropertiesSet() {RequestMappingHandlerMapping mapping applicationContext.getBean(requestMappingHandlerMapping, /**.css, ASTERISK))));});}Overridepublic void setApplicationContext(ApplicationContext context) throws BeansException {this.applicationContext context;}public ListString getUrls() {return urls;}public void setUrls(ListString urls) {this.urls urls;}}十、修改WebSocketHandler.java// 将 import javax.websocket.OnOpen; 替换为import jakarta.websocket.OnOpen;十一、解决使用PathVariable接收参数的接口报错的问题# 以下操作都是在IDEA编辑器中操作的、其他编辑器请自行搜索全局替换方法1、快捷键 Ctrl Shift R全局替换2、勾选正则表达式按钮英文是Match Case 和 Regex3、搜索框输入PathVariable\s(\w)\s(\w)4、替换框输入PathVariable($2) $1 $2 ,RequestMappingHandlerMapping.class);MapRequestMappingInfo, LogoutFilter.class).build();}/*** 强散列哈希加密实现*/Beanpublic BCryptPasswordEncoder bCryptPasswordEncoder(){return new BCryptPasswordEncoder();}}九、修改PermitAllUrlProperties.java// 全部替换package com.ruoyi.framework.config.properties;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Objects;import java.util.Optional;import java.util.regex.Pattern;import org.apache.commons.lang3.RegExUtils;import org.springframework.beans.BeansException;import org.springframework.beans.factory.InitializingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.AnnotationUtils;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.mvc.method.RequestMappingInfo;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;import com.ruoyi.common.annotation.Anonymous;/** * 设置Anonymous注解允许匿名访问的url * * author ruoyi */Configurationpublic class PermitAllUrlProperties implements InitializingBean, /captchaImage).permitAll()// 静态资源可匿名访问.requestMatchers(HttpMethod.GET, /register。

/v3/api-docs/**, /*.html, /。

HandlerMethod map mapping.getHandlerMethods();map.keySet().forEach(info - {HandlerMethod handlerMethod map.get(info);// 获取方法上边的注解 替代path variable 为 *Anonymous method AnnotationUtils.findAnnotation(handlerMethod.getMethod()。

/**.js, JwtAuthenticationTokenFilter.class).addFilterBefore(corsFilter, 替代path variable 为 *Anonymous controller AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), /profile/**).permitAll().requestMatchers(/swagger-ui.html, UsernamePasswordAuthenticationFilter.class)// 添加CORS filter.addFilterBefore(corsFilter。

Anonymous.class);Optional.ofNullable(controller).ifPresent(anonymous - Objects.requireNonNull(info.getPathPatternsCondition().getPatternValues()).forEach(url - urls.add(RegExUtils.replaceAll(url, ASTERISK))));// 获取类上边的注解, /**.html。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。