我们之前使用过滤器链都是在 XML 中手动添加和维护的,本章我们来介绍下如何从数据库读取这些过滤器配置,这样做的好处是便于维护,且可以通过程序来添加过滤器配置,因为我们只需要添加一条记录到数据库即可。
回顾下,之前我们是这样配置的:
1 | <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> |
主要是 filterChainDefinitions
属性,现在我们将其修改为:
1 | <property name="filterChainDefinitionMap" ref=""/> |
我们点开 ShiroFilterFactoryBean
的 filterChainDefinitionMap
属性来看下,它是 Map 类型的:
1 | public void setFilterChainDefinitionMap(Map<String, String> filterChainDefinitionMap) { |
这样我们就可以创建一个类,他从数据库读取权限数据组成一个 Map 类型作为返回值即可,这里我们用实例工厂来实现:
1 | import java.util.LinkedHashMap; |
使用 LinkedHashMap
的原因是为了保证插入顺序有序,具体连接数据库和查询代码这里就不在演示了,自行根据项目使用的 ORM 框架来实现。
最后的配置文件是这样的:
1 | <!-- shiro 过滤器, 要与 web.xml 中的 Filter Name 相同--> |
本章代码地址 : https://github.com/zhaojun1998/Premission-Study/tree/master/Permission-Shiro-12/