?????????由于之前的springcloud相關版本太久,很多新功能無法使用,所以打算抽時間把代碼的版本做一下升級。使用最新版的springboot3.2,發現shiro過濾器無效。經檢查發現原因:
????????springboot3.x使用的是JDK17,從jdk8以后javax.servlet的相關代碼包名改成了jakarta.servlet,shiro-spring的版本1.7,使用的仍然是javax.servlet,在ShiroFilter中因引入的servlet不一致,導致無法解析。首先想到的是升級shiro相關jar包,從maven中找到最新的版本2.0.1發現,shiro對應的最新springboot版本仍是2.X,使用的也還是javax.servlet。
????????通過一下方法,排除javax.servlet,引入jakarta的依賴。這樣就可以了。
注意:
在修改了maven依賴后,一定要檢查一下maven其他地方是否引入的還有javax.servlet包,有的話都排除掉,然后將代碼中javax.servlet的引用,替換為jakarta.servlet。其他代碼就不用再修改了
<!-- shiro -->
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><classifier>jakarta</classifier><version>2.0.1</version><!-- 排除仍使用了javax.servlet的依賴 --><exclusions><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId></exclusion><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId></exclusion></exclusions>
</dependency>
<!-- 引入適配jakarta的依賴包 -->
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><classifier>jakarta</classifier><version>2.0.1</version>
</dependency>
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId><classifier>jakarta</classifier><version>2.0.1</version><exclusions><exclusion><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId></exclusion></exclusions>
</dependency>