简单登录流程:

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. Java并发--并发容器之ConcurrentHashMap

    下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为 ...

  2. Codeforces 17E Palisection 【Manacher】

    Codeforces 17E Palisection E. Palisection In an English class Nick had nothing to do at all, and rem ...

  3. Elixir's keyword lists as option parameters

    备注: 文章转自:https://www.djm.org.uk/posts/writing-extensible-elixir-with-behaviours-adapters-pluggable-b ...

  4. 如何使用 nslookup 查域名的 ttl

    如何使用 nslookup 查域名的 ttl nslookup 经常用,但是最近才使用到查 ttl 的信息. 域名的 ttl 也是网站优化的一个重要参数. nslookup -d www.fastad ...

  5. 单机数据库优化的一些实践(mysql)

    数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问 ...

  6. Request.UrlReferrer详解

    使用前需要进行判断: if (Request != null && Request.UrlReferrer != null && Request.UrlReferrer ...

  7. Bash命令查找本机公网IP

    用Bash命令查找本机公网IP wget -qO - http://ipecho.net/plain; echo

  8. cowboy的get和post的例子

    官方get和post的代码是有问题的,1.1下运行crash,这里修改了下,贴代码 创建工程 rebar-creator create-app testCowboy testCowboy_app.er ...

  9. charles 设置弱网测试

    Charles简介:Charles支持抓去http.https协议的请求,不支持socket. 然后charles会自动配置IE浏览器和工具的代理设置,所以说打开工具直接就已经是抓包状态了. 这里打开 ...

  10. Java 判断某一天是这一年的第几天

    package Day8_06; import java.util.*; public class ClassTest { public static void main(String[] args) ...