Shiro 导致 Spring 事务失效
前段时间将 Shiro 作为权限模块整合到 Spring 中使用,也发了篇整合相关的文章《Shiro 方法上有权限注解的时候才鉴权》,讲如何实现在有打注解时才校验权限。
在集成后的项目中开发时出现有个 Service 的事务是无效的,@Transactional
注解无任何作用。检查后发现这个 Service 是在 Shiro 的 Realm 类中使用 @Autowired
注入的。
前段时间将 Shiro 作为权限模块整合到 Spring 中使用,也发了篇整合相关的文章《Shiro 方法上有权限注解的时候才鉴权》,讲如何实现在有打注解时才校验权限。
在集成后的项目中开发时出现有个 Service 的事务是无效的,@Transactional
注解无任何作用。检查后发现这个 Service 是在 Shiro 的 Realm 类中使用 @Autowired
注入的。
Spring 提供了一些 Java 注解用于声明缓存。
@Cacheable
用于触发缓存@CacheEvict
用于失效缓存@CachePut
可用于在不影响方法运行的情况下更新缓存@Caching
用于将多种缓存操作应用到一个方法中@CacheConfig
用于配置同一个类的缓存配置,类中的所有缓存都将共享这个配置Caffeine 是个高性能的开源 Java 内存缓存库,具有较高的命中率和出色的并发能力。在 Spring Boot 中集成也非常简单,提供了各种开箱既用的工具。
最近参与的新项目 REST API 需要集成 Shiro 权限框架,在集成过程中发现 Shiro 好像只能通过对过滤器指定 Url Path Pattern 的方式针对 URL 进行权限校验。在指定 Filter 的 URL 后,Fitler 会对所有的 URL 进行处理并不会根据需要对 URL 进行略过,但是 API 中并不是所有的接口都需要进行鉴权。
针对这个需求,翻遍了自带的默认过滤器都没有对应合适的 Filter 进行处理,只能自己实现 Filter,好在 Shiro 在扩展方面做得相当不错。本文主要讲述实现一个根据是否有权限注解来进行是否鉴权的方法,在没有 Shiro 权限注解的方法或者类上不进行鉴权。
很多人都喜欢从经典的 Hello world 程序开始介绍一门语言。这里我也贴上一个 Kotlin 的 Hello world 程序,虽然同样是运行在 JVM 上的程序,但是看起来与 Java 还是有很大的不同的。
1 | // helloworld.kt |