我们在 applicationContext中配置受保护的资源和权限的关系

    <property name="filterChainDefinitions">
<value>
/login.jsp= anon
/shiro/login= anon
/shiro/logout = logout /user.jsp = roles[user]
/admin.jsp = roles[admin] # everything else requires authentication: /** = authc
</value>
</property>

这样配置有时候我们受保护的资源和权限特别多,我们希望将这些配置资源和权限信息放到数据库中,然后我们通过一个SQL 的方式取出来, 这种方式应该是最合适的。

  我们可以查看 配置中 filterChainDefinitions 的源码

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;
}

通过 debug的方式 可以看到在初始化时, filterChainDefinitionMap是一个LinkedHashMap,其内容就是我们在配置文件中配置的内容

所以我们可以配置一个单独的bean filterChainDefinitionMap 作为ShiroFilterFactoryBean的属性。

修改applicationContext.xml

创建一个 bean

package com.java.shiro.factory;

import java.util.LinkedHashMap;

public class FilterChainDefinitionMapBuilder {

    public LinkedHashMap<String, String> buildFilterChainDefinitionMap() {
LinkedHashMap<String, String> map = new LinkedHashMap<>(); // 在实际开发中访问数据表

    
     //这里必须是一个LinkedHashMap 保持顺序
map.put("/login.jsp", "anon");
map.put("/**", "authc"); return map;
} }

  再次打断点查看

Shiro-从数据表中初始化资源和权限的更多相关文章

  1. Shiro从数据表中初始化资源和权限

    之前在测试的Web工程下,我们在applicationContext.xml中配置了shiroFilter资源拦截器信息: <bean id="shiroFilter" cl ...

  2. springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、

    要实现的目的:根据登录用户.查询出当前用户具有的所有权限.然后登录系统后.根据查询到的权限信息进行不同的操作. 以下的代码是在搭好的框架之下进行的编码. 文章目录 核心实现部分. 第一种是将用户表和角 ...

  3. 默认情况下,不使用of子句表示在select所有的数据表中加锁(转)

    Select …forupdate语句是我们经常使用手工加锁语句.通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作.同时,在多版本一致读机制的支持下,select语句也不 ...

  4. 转:Sql Server中清空所有数据表中的记录

    如果要删除数据表中所有数据只要遍历一下数据库再删除就可以了,清除所有数据我们可以使用搜索出所有表名,构造为一条SQL语句进行清除了,这里我一一给各位同学介绍.   使用sql删除数据库中所有表是不难的 ...

  5. shiro注解,初始化资源和权限,会话管理

     有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容  注解: 新建一个类: 此时需要有admin的权限才可以执行下面的代码 public class ShiroS ...

  6. Sql Server中清空所有数据表中的记录

    Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 代码如下:exec sp_msforeachtable  @Command1 ='truncate table ?'删除所有数据 ...

  7. code first网站发布后数据表中没有数据问题

    code first网站发布后数据表中没有数据问题 (1).将internal sealed class Configuration类访问修饰符改为public  class Configuratio ...

  8. DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)

    /// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...

  9. excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)

    将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...

随机推荐

  1. iOS 给 ViewController 减负 之 UITableView

    今天看了一些博客文章分享了如何给ViewController 瘦身的问题, 其中一个就是tableView. 的确,随着产品迭代,VC里面可能越来越臃肿,有时候真的需要好好进行一次瘦身.可能是参考的博 ...

  2. HTML系列(3)基本的HTML标签(二)

        本节继续介绍HTML的常用标签.     (1)input标签之文本域(text和textarea).密码域(password): <!DOCTYPE html> <html ...

  3. python中编写带参数decorator

    考察上一节的 @log 装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发 ...

  4. INSPIRED启示录 读书笔记 - 第2章 产品管理与产品营销

    两者不是一回事 1.产品经理的工作是从细节上定义开发团队开发什么产品 2.市场营销的职责是对外宣传产品 产品公司常常会陷入的三种误区 1.由市场营销人员定义产品:由产品营销经理或所谓的产品经理负责收集 ...

  5. Idea根据表自动生成实体

    Idea根据表自动生成实体: 首先说下这种方式有个缺点,就是如果表里面有日期.时间类型,那么需要手动的设置映射类型 第一步:在Idea中配置好数据库: 在Idea窗口右边,点击Database按钮 配 ...

  6. idea创建git分支

        此时只是在本地创建好了分支,修改源代码后add,commit将本地分支提交到远程仓库            分支已创建,其它成员此时就可以从git拉分支

  7. 论4.1loli模拟赛

    论如何合理的挂.... T1: 后缀数组+找规律...没了,别的就没什么了.... T2: 树链剖分+lca....没了, 别的没什么了..... T3: 平衡树可过..然后数据有两组错的... 实际 ...

  8. JavaWeb -- Jsp 和 JavaBean

    JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为: <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件. <jsp ...

  9. Codeforces Round #366 (Div. 2) A , B , C 模拟 , 思路 ,queue

    A. Hulk time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  10. ​二十种实战调优MySQL性能优化的经验

    ​http://www.searchdatabase.com.cn/showcontent_58391.htm   [为查询缓存优化你的查询] 像 NOW() 和 RAND() 或是其它的诸如此类的S ...