shiro讲解之 Shiro Filter

╰+攻爆jí腚メ 2022-06-06 01:29 375阅读 0赞

shiro讲解之 Shiro Filter

本章节将详细说明Shiro Filter。

概念

  • 什么是Shiro Filter

    • Shiro 提供了与 Web 集成的支持,其通过一个ShiroFilter 入口来拦截需要安全控制的URL,然后进行相应的控制。
    • ShiroFilter 类似于如 Strut2/SpringMVC 这种web 框架的前端控制器,是安全控制的入口点,其负责读取配置(如ini 配置文件),然后判断URL 是否需要登录/权限等工作。
  • Shiro Filter工作原理

    这里写图片描述

  • Shiro Filter DelegatingFilterProxy
    DelegatingFilterProxy 作用是自动到 Spring 容器查找名字为 shiroFilter(filter-name)的 bean 并把所有 Filter 的操作委托给它。

    这里写图片描述

    • [urls] 部分的配置,其格式是: “url=拦截器[参数],拦截器[参数]”;
    • 如果当前请求的 url 匹配 [urls] 部分的某个 url 模式,将会执行其配置的拦截器。
    • anon(anonymous) 拦截器表示匿名访问(即不需要登录即可访问)
    • authc (authentication)拦截器表示需要身份认证通过后才能访问

以下为Shiro的过滤器以及过滤类型。

这里写图片描述

  • URL 匹配模式

    • url 模式使用 Ant 风格模式
    • Ant 路径通配符支持 ?、、*,注意通配符匹配不包括目录分隔符“/”:

      • ?:匹配一个字符,如 /admin? 将匹配 /admin1,但不匹配 /admin 或 /admin/;
      • *:匹配零个或多个字符串,如 /admin 将匹配 /admin、/admin123,但不匹配 /admin/1;
      • :匹配路径中的零个或多个路径,如 /admin/ 将匹配 /admin/a 或 /admin/a/b
  • URL 匹配顺序

    • URL 权限采取第一次匹配优先的方式,即从头开始
    • 使用第一个匹配的 url 模式对应的拦截器链
  1. * 如:
  2. /bb/\*\*=filter1
  3. /bb/aa=filter2
  4. /\*\*=filter3
  5. 如果请求的url是“/bb/aa”,因为按照声明顺序进行匹配,那么将使用 filter1 进行拦截

  • 最后贴上我的DeledatingFilterProxy 和 shiroFilter

    • DeledatingFilterProxy

      1. <!-- 配置Shiro Filter -->
      2. <!-- Shiro Filter is defined in the spring application context: -->
      3. <filter>
      4. <filter-name>shiroFilter</filter-name>
      5. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
      6. <init-param>
      7. <param-name>targetFilterLifecycle</param-name>
      8. <param-value>true</param-value>
      9. </init-param>
      10. </filter>
      11. <filter-mapping>
      12. <filter-name>shiroFilter</filter-name>
      13. <url-pattern>/*</url-pattern>
      14. </filter-mapping>
    • shiroFilter

      1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
      2. <property name="securityManager" ref="securityManager" />
      3. <property name="loginUrl" value="/login/toLogin" />
      4. <property name="successUrl" value="/example/index" />
      5. <property name="unauthorizedUrl" value="/example/unauthorized" />
      6. <property name="filterChainDefinitions">
      7. <value>
      8. /login/toLogin = anon
      9. /login/loginVal = anon
      10. /login/logout = logout
      11. /** = authc
      12. </value>
      13. </property>
      14. </bean>

发表评论

表情:
评论列表 (有 0 条评论,375人围观)

还没有评论,来说两句吧...

相关阅读