日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot+MyBatis+Shiro 搭建杂谈

發布時間:2025/3/20 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot+MyBatis+Shiro 搭建杂谈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??點擊上方?好好學java?,選擇?星標?公眾號

重磅資訊、干貨,第一時間送達 今日推薦:用好Java中的枚舉,真的沒有那么簡單!個人原創+1博客:點擊前往,查看更多 鏈接:https://www.cnblogs.com/deng-cc/p/9415279.html

0、寫在前面的話

一直想能仿公司框架的形式,著手做一個簡單的腳手架,一來是帶著目標性能更好地學習,接觸新的技術,另外自己如果有什么想要實現的簡單需求,就可以進行快速開發,主要還是希望能在權限上有所控制,所以最花時間的還是在Shiro上。

其實目標在github已經有不少大佬的參考物了:

  • zheng(https://gitee.com/shuzheng/zheng) ?基于Spring+SpringMVC+Mybatis分布式敏捷開發系統架構,提供整套公共微服務服務模塊

  • ES(https://github.com/zhangkaitao/es) ?JavaEE企業級項目的快速開發的腳手架,提供了底層抽象和通用功能,拿來即用

  • renren-security(https://www.renren.io/) ?輕量級權限管理系統

  • lenos(https://gitee.com/bweird/lenosp) ?快速開發模塊化腳手架

我自己也試著搭建了最簡單的包含權限的后端,主要是為了走通整個流程,之后也會慢慢試著參考大佬們做一款自己的架子。在整個集成過程中,當然不免遇到了各種奇奇怪怪的問題,這里做一些簡單的經驗記錄,避免舊坑重踩。

1、技術框架整合

1.1 Maven多模塊項目的搭建

參考鏈接:

  • 為什么要搭建多模塊項目?

  • Maven最佳實踐:劃分模塊(http://juvenshun.iteye.com/blog/305865)

  • maven構建企業級多模塊項目(最好的劃分模塊方式)(https://blog.csdn.net/program_guys/article/details/76407360)

  • 多模塊項目如何搭建?

  • Maven的多模塊 Spring MVC + Spring + Mybatis 項目的搭建(http://www.leeyom.top/2017/08/01/tech-maven-multi-module-ssm/)

  • SpringBoot多模塊項目實踐(Multi-Module)(https://segmentfault.com/a/1190000011367492)

1.2 SpringBoot-MyBatis集成

參考鏈接:

  • Spring Boot 集成MyBatis(https://blog.csdn.net/isea533/article/details/50359390)

  • mybatis-spring-boot-autoconfigure(http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/)

1.3 SpringBoot-Shiro集成

參考鏈接:

  • Shiro用starter方式優雅整合到SpringBoot中(https://segmentfault.com/a/1190000014479154#articleHeader0)

  • Spring Boot 集成-Shiro

  • Shiro下簡單的RBAC(Realm及相關對象)(http://jinnianshilongnian.iteye.com/blog/2022468)

2、踩坑警告

  • SpringBoot 版本:2.0.3.RELEASE

  • JUnit 版本:4.12

  • SpringBoot-MyBatis 版本:1.3.2

  • SpringBoot-Shiro 版本:1.4.0-RC2

2.1 多模塊帶來的注意事項

SpringBoot 多模塊的單元測試需要指定注解 @SpringBootTest(classes = {Application.class}),這里的 Application.class 即你的SpringBoot啟動類,這也就意味著你其他模塊的測試也只能在 Application.class 所在的模塊中進行,否則編譯無法通過因為其他模塊找不到 Application.class,當然這是因為其他模塊中的依賴問題導致的。

另外需要注意的是,SpringBoot中 的 Bean 掃描默認為 Application.java 所在包及子包,所以哪怕是多模塊,也請注意包名的問題,并調整 Application.java 的位置,否則很容易出現找不到 Bean 注入的情況。

如果你還使用了 MyBatis-generator,同樣其對于數據源的配置文件,因為多模塊的緣故,你可能也無法直接使用 SpringBoot 中 application.properties 的配置,需要單獨寫一個配置文件在 MyBatis-generator 使用的那個模塊下。

2.2 SpringBoot+MyBatis與單元測試

如果在單元測試時發現 xxxMapper 或 xxxDao 的 Bean 無法注入,那么請注意你使用的注解了。在持久層接口上注解使用 @Mapper,而不是僅僅使用 @Repository。實際上哪怕不使用 @Repository 也可以注入持久層的 Bean,但是IDE會在Service類中報紅提醒 xxxDao 沒有注冊 Bean,所以最好還是加上 @Repository,盡管去掉也沒有什么影響。

@Repository @Mapper public interface RoleDao {int deleteByPrimaryKey(Long id);int insert(Role record);int insertSelective(Role record);Role selectByPrimaryKey(Long id);int updateByPrimaryKeySelective(Role record);int updateByPrimaryKey(Role record);Set<Role> findAll();Set<Role> findByUserId(Long userId); }

2.3 Shiro中自定義Realm的Bean注冊

在 SpringBoot 和 Shiro 的集成中,Shiro的配置通常是使用一個自定義配置類,通過在方法上使用 @Bean 注解來將配置注冊成 Bean,如下:

@Configuration public class ShiroConfig { @Bean public Realm realm() {return new MyRealm();}@Bean public ShiroFilterChainDefinition shiroFilterChainDefinition() {DefaultShiroFilterChainDefinition chain = new DefaultShiroFilterChainDefinition();//todo "/anon" not usefulchain.addPathDefinition("/anon/*", "anon");chain.addPathDefinition("/authc/*", "authc");return chain;} }

那么在自定義的Realm中還需要單獨的注解(如 @Component)標記嗎?答案是不需要。如下,哪怕它之中還需要用到其他的 Bean 組件,也不需要再單獨做組件注解了(加上反而因為和 @Bean 的方式沖突報錯):

//無需 @Component public class MyRealm extends AuthorizingRealm {@Autowiredprivate UserService userService;@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {return null;}@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {//...return null;} }

另外需要注意的是,在配置url訪問權限時,如下兩種寫法請注意:

  • chain.addPathDefinition("/anon", "anon"); ? ? ?//無效

  • chain.addPathDefinition("/anon/*", "anon"); ? //有效

3、Demo源碼

  • deng-cc / baseMan-demo-init

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的SpringBoot+MyBatis+Shiro 搭建杂谈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。