1.  shiro的核心过滤器定义在枚举类DefaultFilter 中,一共有11个 ,配置哪个路径对应哪个拦截器进行处理

  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by Fernflower decompiler)
  4. //
  5.  
  6. package org.apache.shiro.web.filter.mgt;
  7.  
  8. import java.util.LinkedHashMap;
  9. import java.util.Map;
  10. import javax.servlet.Filter;
  11. import javax.servlet.FilterConfig;
  12. import javax.servlet.ServletException;
  13. import org.apache.shiro.util.ClassUtils;
  14. import org.apache.shiro.web.filter.authc.AnonymousFilter;
  15. import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;
  16. import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
  17. import org.apache.shiro.web.filter.authc.LogoutFilter;
  18. import org.apache.shiro.web.filter.authc.UserFilter;
  19. import org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter;
  20. import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;
  21. import org.apache.shiro.web.filter.authz.PortFilter;
  22. import org.apache.shiro.web.filter.authz.RolesAuthorizationFilter;
  23. import org.apache.shiro.web.filter.authz.SslFilter;
  24. import org.apache.shiro.web.filter.session.NoSessionCreationFilter;
  25.  
  26. public enum DefaultFilter {
  27. anon(AnonymousFilter.class),
  28. authc(FormAuthenticationFilter.class),
  29. authcBasic(BasicHttpAuthenticationFilter.class),
  30. logout(LogoutFilter.class),
  31. noSessionCreation(NoSessionCreationFilter.class),
  32. perms(PermissionsAuthorizationFilter.class),
  33. port(PortFilter.class),
  34. rest(HttpMethodPermissionFilter.class),
  35. roles(RolesAuthorizationFilter.class),
  36. ssl(SslFilter.class),
  37. user(UserFilter.class);
  38. private final Class<? extends Filter> filterClass;
  39.  
  40. private DefaultFilter(Class<? extends Filter> filterClass) {
  41. this.filterClass = filterClass;
  42. }
  43.  
  44. public Filter newInstance() {
  45. return (Filter)ClassUtils.newInstance(this.filterClass);
  46. }
  47.  
  48. public Class<? extends Filter> getFilterClass() {
  49. return this.filterClass;
  50. }
  51.  
  52. public static Map<String, Filter> createInstanceMap(FilterConfig config) {
  53. Map<String, Filter> filters = new LinkedHashMap(values().length);
  54. DefaultFilter[] var2 = values();
  55. int var3 = var2.length;
  56.  
  57. for(int var4 = 0; var4 < var3; ++var4) {
  58. DefaultFilter defaultFilter = var2[var4];
  59. Filter filter = defaultFilter.newInstance();
  60. if (config != null) {
  61. try {
  62. filter.init(config);
  63. } catch (ServletException var9) {
  64. String msg = "Unable to correctly init default filter instance of type " + filter.getClass().getName();
  65. throw new IllegalStateException(msg, var9);
  66. }
  67. }
  68.  
  69. filters.put(defaultFilter.name(), filter);
  70. }
  71.  
  72. return filters;
  73. }
  74. }

具体作用为:

  • authc:org.apache.shiro.web.filter.authc.FormAuthenticationFilter

    • 需要认证登录才能访问
  • user:org.apache.shiro.web.filter.authc.UserFilter
    • 用户拦截器,表示必须存在用户。
  • anon:org.apache.shiro.web.filter.authc.AnonymousFilter
    • 匿名拦截器,不需要登录即可访问的资源,匿名用户或游客,一般用于过滤静态资源。
  • roles:org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
    • 角色授权拦截器,验证用户是或否拥有角色。
    • 参数可写多个,表示某些角色才能通过,多个参数时写 roles["admin,user"],当有多个参数时,用户必须同时具备参数中的每个角色才能通过
  • perms:org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
    • 权限授权拦截器,验证用户是否拥有权限
    • 参数可写多个,表示需要某些权限才能通过,多个参数时写 perms["user, admin"],当有多个参数时必须每个参数都通过才算可以
  • authcBasic:org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
    • httpBasic 身份验证拦截器。
  • logout:org.apache.shiro.web.filter.authc.LogoutFilter
    • 退出拦截器,执行后会直接跳转到shiroFilterFactoryBean.setLoginUrl()设置的 url
  • port:org.apache.shiro.web.filter.authz.PortFilter
    • 端口拦截器, 可通过的端口。
  • ssl:org.apache.shiro.web.filter.authz.SslFilter
    • ssl拦截器,只有请求协议是https才能通过。

2.  Shiro的Filter配置路径

  • /admin/video /user /pub
  • 路径通配符支持 ?、*,注意通配符匹配不 包括目录分隔符“/”
  • 心 可以匹配所有,不加*可以进行前缀匹配,但多个冒号就需要多个 * 来匹配
  1. URL权限采取第一次匹配优先的方式
  2. ? : 匹配一个字符,如 /user? , 匹配 /user3,但不匹配/user/;
  3. * : 匹配零个或多个字符串,如 /add* ,匹配 /addtest,但不匹配 /user/1
  4. ** : 匹配路径中的零个或多个路径,如 /user/** 将匹 配 /user/xxx 或 /user/xxx/yyy
  5. 例子
  6. /user/**=filter1
  7. /user/add=filter2
  8. 请求 /user/add 命中的是filter1拦截器
  • 性能问题:通配符比字符串匹配会复杂点,所以性能也会稍弱,推荐是使用字符串匹配方式

3. shiro数据加解密

shiro数据安全主要是由Shiro 里的 CredentialsMatcher来处理

  • 什么是散列算法

    • 一般叫hash,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,适合存储密码,比如MD5
  • 什么是salt(盐) 667788——》aabbcc
    • 如果直接通过散列函数得到加密数据,容易被对应解密网站暴力破解,一般会在应用程序里面加特殊的自动进行处理,比如用户id,例子:加密数据 = MD5(明文密码+用户id), 破解难度会更大,也可以使用多重散列,比如多次md5
  • Shiro里面 CredentialsMatcher,用来验证密码是否正确,
      1. 源码:AuthenticatingRealm -> assertCredentialsMatch()
      1. 一般会自定义验证规则
      2. @Bean
      3. public HashedCredentialsMatcher hashedCredentialsMatcher(){
      4. HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
      5. //散列算法,使用MD5算法;
      6. hashedCredentialsMatcher.setHashAlgorithmName("md5");
      7. //散列的次数,比如散列两次,相当于 md5(md5("xxx"));
      8. hashedCredentialsMatcher.setHashIterations(2);
      9. return hashedCredentialsMatcher;
      10. }

shiro框架学习-6-Shiro内置的Filter过滤器及数据加解密的更多相关文章

  1. python学习笔记011——内置函数filter()

    1 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 2 语法 filter(function, iterable) function -- 函数,过 ...

  2. shiro框架学习-1-shiro基本概念

    1. 什么是权限控制 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源, ...

  3. Spring Cloud Alibaba学习笔记(20) - Spring Cloud Gateway 内置的全局过滤器

    参考:https://cloud.spring.io/spring-cloud-static/Greenwich.SR2/single/spring-cloud.html#_global_filter ...

  4. ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

    于ASP.NET MVC Preview5. 前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自Filt ...

  5. [转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

    前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IAction ...

  6. Spring Security 入门(1-6-2)Spring Security - 内置的filter顺序、自定义filter、http元素和对应的filterChain

    Spring Security 的底层是通过一系列的 Filter 来管理的,每个 Filter 都有其自身的功能,而且各个 Filter 在功能上还有关联关系,所以它们的顺序也是非常重要的. 1.S ...

  7. 内置函数filter()和匿名函数lambda解析

    一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器 ...

  8. ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希

    数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...

  9. shiro框架学习-3- Shiro内置realm

    1. shiro默认自带的realm和常见使用方法 realm作用:Shiro 从 Realm 获取安全数据 默认自带的realm:idae查看realm继承关系,有默认实现和自定义继承的realm ...

随机推荐

  1. 【VS开发】设备控制台 (DevCon.exe) 命令

    设备控制台 (DevCon.exe) 命令 DevCon (DevCon.exe) 是一个命令行工具,可以显示有关运行 Windows 的计算机上设备的详细信息.还可以使用 DevCon 启用.禁用. ...

  2. flink部署

    参考: https://ververica.cn/developers-resources/ #flink参数 https://blog.csdn.net/qq_35440040/article/de ...

  3. Python input/output boilerplate for competitive programming

    The following code is my submission for Codeforces 1244C The Football Season. import io import sys i ...

  4. Spring 最常用的 7 大类注解,史上最强整理!

    随着技术的更新迭代,Java5.0开始支持注解.而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架. 而spring的的注解那 ...

  5. MySQL的事务和锁

    MySQL的事务和锁   阅读目录 什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再 ...

  6. Ubuntu14.04安装Caffe(CPU)

    一 安装Ubuntu14.04LTS Ubuntu分区 1.SWAP 交换分区:与物理内存相当. 2.“/” 根目录分区:该区大小由硬盘大小而定,10-100G. 3.“HOME” 家目录分区:该区也 ...

  7. 服务器部署Java Web及微信开发调试

    参考摘抄: 阿里云部署Java网站和微信开发调试心得技巧(上):https://www.imooc.com/article/20583 阿里云部署Java网站和微信开发调试心得技巧(下):https: ...

  8. Keepalived+Nginx+Tomcat 实现高可用Web集群

    https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...

  9. 分布式的几件小事(四)dubbo负载均衡策略和集群容错策略

    1.dubbo负载均衡策略 ①random loadbalance 策略 默认情况下,dubbo是random loadbalance 随机调用实现负载均衡,可以对provider不同实例设置不同的权 ...

  10. ArcGis之popup列表字段自定义

    ArcGis之popup列表字段自定义 featureLayer图层中可以使用popupTemplate属性添加弹窗. API:https://developers.arcgis.com/javasc ...