自学-filterChainDefinitions的源码及和数据库进行交互-17
来源:互联网 发布:修改数据库时间 编辑:程序博客网 时间:2024/06/16 02:40
前几节我们应该对这个filterChainDefinitions 有了解了吧!我们所有的权限设置都配置在了这个org.apache.shiro.spring.web.ShiroFilterFactoryBean这个属性中,我们可以想下,现在是有这几个权限,那加入有很多呢,如果还配置在这里是不是不太方便了,开发就是能多简便我们就怎么写对吧,根据观察我们可以发现这个属性中的值是键值对的形式而且还是有序呢?那么这些我们会想到些什么呢?
值很多,我们是不是可以将这些放到数据库呢?键值对是不是会想到Map呢?有序会不会想到LinkedHashMap呢?为了验证我们的想的是正确的,那么我们就来打断点加编程来测试下吧。
使用Ctrl点进去看到源码是这样的:
public void setFilterChainDefinitions(String definitions) { Ini ini = new Ini(); ini.load(definitions); //did they explicitly state a 'urls' section? Not necessary, but just in case: Ini.Section section = ini.getSection(IniFilterChainResolverFactory.URLS); if (CollectionUtils.isEmpty(section)) { //no urls section. Since this _is_ a urls chain definition property, just assume the //default section contains only the definitions: section = ini.getSection(Ini.DEFAULT_SECTION_NAME); } setFilterChainDefinitionMap(section); }
public void setFilterChainDefinitionMap(Map<String, String> filterChainDefinitionMap) { this.filterChainDefinitionMap = filterChainDefinitionMap; }那么我们就在
public void setFilterChainDefinitionMap(Map<String, String> filterChainDefinitionMap) { this.filterChainDefinitionMap = filterChainDefinitionMap; }打个断点吧:一直走到这里可以看到:
可以看到使用LinkedHashMap存储的,那么我们就又有想法了,我们可以写一个方法,把这些值获取出来放入到Map中然后使用工厂bean的形式在xml中获取。
源码filterChainDefinitions 的类实现了FactoryBean.
写一个方法来存储键值对,为了测试我们就不建立数据库了,直接将值存储在map中:
FilterChainDefinitionMap.java:
package com.yiyi.subject;import java.util.LinkedHashMap;/** * 自定义FilterChainDefinitionMap * */public class FilterChainDefinitionMap {/** * 由于在FilterChainDefinitionMap 中是需要顺序的,所以我们选择用LinkedHashMap */ public LinkedHashMap<String, String> getMap(){ LinkedHashMap< String , String> map=new LinkedHashMap<String, String>(); //将配置文件中的数据放到map 中。 map.put("/login.jsp", "anon"); map.put("/shiro/login", "anon"); map.put("/shiro/logout", "logout"); map.put("/admin.jsp", "roles[admin]"); map.put("/user.jsp", "roles[user]"); map.put("/**", "authc"); return map; }}
然后配置:<!-- shiroFilter:web.xml中的name一致。否则报错 --><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager" /><property name="loginUrl" value="login.jsp" /><property name="successUrl" value="index.jsp" /><property name="unauthorizedUrl" value="unauthorized.jsp" /><!--anon:(anonymous) 拦截器表示匿名访问(即不需要录即可访问)authc:(authentication)拦截器表示需要身份认证通过后才能访问--><!--<property name="filterChainDefinitions"><value>/login.jsp = anon/shiro/login = anon/shiro/logout =logout/admin.jsp=roles[admin]/user.jsp=roles[user]# everything else requires authentication:/** = authc </value></property>--><property name="filterChainDefinitionMap" ref="filter"></property></bean><!-- 工厂bean --><bean id="filter" factory-bean="filterChainDefinitionMap" factory-method="getMap"></bean><bean id="filterChainDefinitionMap" class="com.yiyi.subject.FilterChainDefinitionMap"></bean>
通过打断点测试,发现和之前的内容获取的也是一样的,所以说俩种方法都可以实现,这个相对权限多一点更加实用。
0 0
- 自学-filterChainDefinitions的源码及和数据库进行交互-17
- ShuffleMapTask执行结果和Driver的交互原理及源码
- 自学数据库的视图和索引
- 网卡如何和上层进行交互的
- JS和OC进行交互的总结
- Zend Framework使用Zend_Paginator进行数据库交互和分页
- Zend Framework使用Zend_Paginator进行数据库交互和分页
- pandas和数据库进行交互(以mysql为例)
- EXT.NET应用例子,上传和下载图片及与数据库的交互
- 在mfc使用ADO对象进行数据库的交互
- shiro-03shiro的filterChainDefinitions
- Shrio的filterChainDefinitions过滤器配置
- VS2008和数据库的交互过程
- asp.net 图片和数据库的交互
- hibernate的session和数据库交互
- 数据库和网页之间的交互
- [VB.NET源码]数据库与XML的交互
- [VB.NET源码]数据库与XML的交互
- 【NOIP2014八校联考第3场第1试10.4】规避(path) (Standard IO)
- IDEA 常用设置
- 数据结构实验之栈六:下一较大值(二)
- 【GDKOI2017模拟1.12】与运算
- (转)Android Context 上下文 你必须知道的一切
- 自学-filterChainDefinitions的源码及和数据库进行交互-17
- POJ1459Power Network(最大流)
- 头文件和源文件的关系
- 单词检索【NOIP2014八校联考第4场第1试10.19】
- MVP模式
- 大神养成之路上的经验教训,持续不定期更新ing(2)
- 4.SQLite数据库小结
- new & delete
- 线性表的顺序存储实现