简单登录流程:

1.  SecurityManager  
2.  SecurityUtils.setSecurityManager

3.  SecurityUtils.getSubject    
4.  token(UsernamePasswordToken等) 
5.  subject.login

Apache Shiro Configuration

Shiro 配置--ini

》适用于用户少且不需要在运行时动态创建的情景
1. web.xml 中自定义shiro.ini位置(默认位置)
  1. /WEB-INF/shiro.ini or classpath:shiro.ini
    配置内容
  1. <filter>
  2. <filter-name>ShiroFilter</filter-name>
  3. <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
  4. <init-param>
  5. <param-name>configPath</param-name>
  6. <param-value>/WEB-INF/anotherFile.ini</param-value>
  7. </init-param>
  8. </filter>
2. Shiro.ini 示例
  1. # =======================
  2. # Shiro INI configuration
  3. # =======================
  4. [main]
  5. # Objects and their properties are defined here,
  6. # Such as the securityManager, Realms and anything
  7. # else needed to build the SecurityManager
  8. [users]
  9. # The 'users' section is for simple deployments
  10. # when you only need a small number of statically-defined
  11. # set of User accounts.
  12. [roles]
  13. # The 'roles' section is for simple deployments
  14. # when you only need a small number of statically-defined
  15. # roles.
  16. [urls]
  17. # The 'urls' section is used for url-based security
  18. # in web applications. We'll discuss this section in the
  19. # Web documentation


说明:


[main]  主配置

configure the application's SecurityManager instance and any of its dependencies, such as Realms.
配置SecurityManager 及其依赖,如Realms(安全数据源).
  1. [main]
  2. sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher # 加密密码匹配
  3. # true = hex, false = base64:
  4. sha256Matcher.storedCredentialsHexEncoded = false
  5. myRealm = com.company.security.shiro.DatabaseRealm
  6. myRealm.connectionTimeout = 30000
  7. myRealm.username = jsmith # 内部被转换为 myRealm.setUsername("jsmith");
  8. myRealm.password = secret
  9. myRealm.credentialsMatcher = $sha256Matcher # 凭证(密码)加密
  10. securityManager.sessionManager.globalSessionTimeout = 1800000

多个属性(逗号 ,)
  1. securityManager.sessionManager.sessionListeners = $sessionListener1, $sessionListener2
Map形式属性设置
  1. object1 = com.company.some.Class
  2. object2 = com.company.another.Class
  3. ...
  4. anObject = some.class.with.a.Map.property
  5. anObject.mapProperty = key1:$object1, key2:$object2
重复设置的属性,后写的覆盖前面的
  1. myRealm = com.company.security.MyRealm
  2. ...
  3. myRealm = com.company.security.DatabaseRealm #(覆盖了前面的myRealm)


[users] 用户配置

  1. [users]
  2. admin = secret # A password is required.
  3. lonestarr = vespa, goodguy, schwartz
  4. darkhelmet = ludicrousspeed, badguy, schwartz
  5. # user1 = sha256-hashed-hex-encoded password, role1, role2, ... # 可以使用 shiro 的Command Line Hasher 来加密密码。需要配置 credentialsMatcher
格式: 用户 = 密码,角色1,角色2,... ,角色N
  1. username = password, roleName1, roleName2, ..., roleNameN


[roles] 角色配置

  1. [roles]
  2. # 'admin' role has all permissions, indicated by the wildcard '*'
  3. admin = * # 所有权限
  4. # The 'schwartz' role can do anything (*) with any lightsaber:
  5. schwartz = lightsaber:* # 角色 schwartz 拥有对资源 lightsaber 做任何事的权限
  6. # The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
  7. # license plate 'eagle5' (instance specific id)
  8. goodguy = winnebago:drive:eagle5 # 角色 goodguy 拥有对 id 为 eagle5 的 winnebago 资源执行 drive 的权限
格式:角色 = 权限定义1,权限定义2,... ,权限定义N
  1. rolename = permissionDefinition1, permissionDefinition2, ..., permissionDefinitionN

权限定义:http://shiro.apache.org/permissions.html


[url] web应用中url过滤

  1. [urls]
  2. /index.html = anon
  3. /user/create = anon
  4. /account/**=ssl,authc # Any request to my application's path of /account or any of it's sub paths (/account/foo, /account/bar/baz, etc) will trigger the 'ssl, authc' filter chain
  5. /user/** = authc
  6. /admin/** = authc, roles[administrator]
  7. /rest/** = authc, rest
  8. /remoting/rpc/** = authc, perms["remote:invoke"]
格式:
  1. URL_Ant_Path_Expression = Path_Specific_Filter_Chain
注意:
1. 所有URL都是相对于 HttpServletRequest.getContextPath()  值而言的
2. URL过滤原则是 FIRST MATCH WINS.  后面的不会覆盖前面的!
url中过滤器(anno等)定义:
  1. filter1[optional_config1], filter2[optional_config2], ..., filterN[optional_configN] # 如 authc, perms["remote:invoke"]
注意:若filter不是shiro中已定义的(DefaultFilter),而是自己继承 PathMatchingFilter 实现的,则需要在【main】中先声明
测试时,可以在【main】中禁用 filter
  1. [main]
  2. ...
  3. # configure Shiro's default 'ssl' filter to be disabled while testing:
  4. ssl.enabled = false

登录请求login.do不能设为authc

Java安全框架 Apache Shiro学习-1-ini 配置的更多相关文章

  1. Apache Shiro学习-2-Apache Shiro Web Support

     Apache Shiro Web Support  1. 配置 将 Shiro 整合到 Web 应用中的最简单方式是在 web.xml 的 Servlet ContextListener 和 Fil ...

  2. Apache Shiro 学习记录5

    本来这篇文章是想写从Factory加载ini配置到生成securityManager的过程的....但是貌似涉及的东西有点多...我学的又比较慢...很多类都来不及研究,我又怕等我后面的研究了前面的都 ...

  3. apache shiro学习笔记

    一.权限概述 1.1 认证与授权 认证:系统提供的用于识别用户身份的功能,通常登录功能就是认证功能-----让系统知道你是谁?? 授权:系统授予用户可以访问哪些功能的许可(证书)----让系统知道你能 ...

  4. Apache shiro学习总结

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  5. Apache Shiro 学习记录2

    写完上篇随笔以后(链接).....我也想自己尝试一下写一个Strategy.....Shiro自带了3个Strategy,教程(链接)里作者也给了2个.....我想写个都不一样的策略.....看来看去 ...

  6. Apache Shiro 学习记录1

    最近几天在学习Apache Shiro......看了一些大神们的教程.....感觉收获不少.....但是毕竟教程也只是指引一下方向....即使是精品教程,仍然有很多东西都没有说明....所以自己也稍 ...

  7. 《Shiro框架》shiro学习中报错解决方法

    [1] 最近在学习shiro,在学习过程中出现了一个问题,报错如下: org.apache.shiro.UnavailableSecurityManagerException: No Security ...

  8. Apache Shiro(六)-基于URL配置权限

    数据库 先准备数据库啦. DROP DATABASE IF EXISTS shiro; CREATE DATABASE shiro DEFAULT CHARACTER SET utf8; USE sh ...

  9. 权限框架Apache Shiro 和 Spring Security

    Shiro 首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势.Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证.授 ...

随机推荐

  1. javascript中typeof用法

    JS中的变量是松散类型(即弱类型)的,可以用来保存任何类型的数据. typeof 可以用来检测给定变量的数据类型,可能的返回值: 1. 'undefined' --- 这个值未定义: 2. 'bool ...

  2. Python 运行其他程序

    10.4 运行其他程序 在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程, ...

  3. python第三方库

    autopy autopy是一个自动化操作的python库,可以模拟一些鼠标.键盘事件,还能对屏幕进行访问 pywin32 win32api的python封装 PIL python的图形图像处理框架

  4. PHP实现的多文件上传类及用法示例

    这篇文章主要介绍了PHP实现的多文件上传类及用法,详细分析了php实现的多文件上传类与具体的使用技巧,需要的朋友可以参考下 1.upFiles.css.php 文件 <?php class Up ...

  5. How to install torcs package in Debian

    Installation instructions Installing torcs package in Debian Wheezy is as easy as running: 没想到在debia ...

  6. linq左连接

    Table1和Table2连接,把Table1的全列出来 var tempData = from a in table1 join b in table2 on a.Id equals b.aId i ...

  7. HDOJ5437(优先队列)

    Alisha’s Party Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  8. Excel不同工作簿之间提取信息

    Sub 不同工作簿间提取信息() '用于单个字段信息的提取: Dim w As Workbook, wb1 As Workbook, wb2 As Workbook, wb3 As Workbook ...

  9. 阻塞队列之二:LinkedTransferQueue

    一.LinkedTransferQueue简介 TransferQueue是一个继承了BlockingQueue的接口,并且增加若干新的方法.LinkedTransferQueue是TransferQ ...

  10. Vue踩坑记录册

    1.vue-cli+webpack项目 修改项目名称 解决办法: 1 删除 node_modules 文件夹(如果修改项目名称,需要在在package.json中修改对应的name) 2 重新安装依赖 ...