一、引入Sa-Token
在basic-frame 子模块中,修改pom.xml文件
在这里需要说明一下,因为现在所搭建的脚手架是基于Spring Boot 3.0所搭建的,所以会遇到很多基于Spring Boot 2.0 搭建不同的问题。
包括很多依赖也会有些不一样,所以如果星友们在观看系列教程时,需要确认是基于那个版本的Spring Boot 搭建的。当让我也会将我所遇到的问题,及需要特别注意的事项尽可能在文章中标明清楚,这样方便各位星友们不用烦恼于Spring Boot 版本的不同再去找其他的博文解决不同的问题。要是各位星友们在遇到未记载的问题,也希望星友们能在评论区分享一下问题,及解决方法,大家相互交流学习,毕竟谁还不是一个菜鸟呢
二、Spring Boot 2.0 与 Spring Boot 3.0不同
Spring Boot 2.0
Spring Boot 3.0
三、问题与解决
问题一
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cn.dev33.satoken.spring.SpringBootVersionCompatibilityChecker': Failed to instantiate [cn.dev33.satoken.spring.SpringBootVersionCompatibilityChecker]: Constructor threw exception
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1337) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.11.jar:6.1.11]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.11.jar:6.1.11]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.2.jar:3.3.2]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.2.jar:3.3.2]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.2.jar:3.3.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.2.jar:3.3.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.2.jar:3.3.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.2.jar:3.3.2]
at com.ucontrol.frame.FrameConfigTestApplication.main(FrameConfigTestApplication.java:9) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.2.jar:3.3.2]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [cn.dev33.satoken.spring.SpringBootVersionCompatibilityChecker]: Constructor threw exception
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:221) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:94) ~[spring-beans-6.1.11.jar:6.1.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1331) ~[spring-beans-6.1.11.jar:6.1.11]
... 22 common frames omitted
Caused by: cn.dev33.satoken.exception.SaTokenException: 当前 SpringBoot 版本(3.3.2)与 Sa-Token 依赖不兼容,请将依赖 sa-token-spring-boot-starter 修改为:sa-token-spring-boot3-starter
at cn.dev33.satoken.spring.SpringBootVersionCompatibilityChecker.<init>(SpringBootVersionCompatibilityChecker.java:23) ~[sa-token-spring-boot-starter-1.38.0.jar:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:195) ~[spring-beans-6.1.11.jar:6.1.11]
... 24 common frames omitted
出现这个问题主要是Spring Boot 版本与Sa-Token不兼容,在Spring Boot 3.0中使用sa-token-spring-boot-starter依赖,只要将依赖改成sa-token-spring-boot3-starter就可以了
四、修改application.yml文件
五、添加配置类SaTokenConfig
六、效果
接口1:
接口2:
接口1能访问成功,是因为在拦截器哪里配置了/login/**
接口2不能访问成功,是因为在拦截器那里没有配置跳过该请求URL,如果想接口2也能像接口1一样跳过拦截,有两种方式:
(1)跟接口1一样在拦截器excludePathPatterns加上/saToken/**或者/saToken/testLogin即可
(2)使用Sa-Token中的@SaIgnore注解也能跳过校验