syshlangApache Shiro框架默认过滤器及URL匹配 | 浪迹一生

所谓拥有,皆非束缚;所有过往,皆为序章。

0%

Apache Shiro框架默认过滤器及URL匹配

前言

    shiro框架在Java Web应用中使用时,本质上是通过filter方式集成的,也就是说,它是遵循过滤器链规则,其通过一个ShiroFilter入口来拦截需要安全控制的URL,然后进行相应的控制,本文将对Shiro框架默认过滤器及URL匹配做讲解。


Shiro框架默认过滤器

ShiroFilter的工作原理

    filterChainDefinitions是ShiroFilter的属性,在filterChainDefinitions中可以对Url进行配置,看是否可以登录或安全权限的访问,详见后文。
    由上图可以看出:浏览器过来的任何请求都会先经过shiro先过滤,先到达AbstractShiroFilter.executeChain()方法,去根据request解析出来的url找到对应的过滤链,然后执行过滤器链,直到成功才会执行javaweb本身的过滤器。

Shiro框架默认过滤器

    ShiroFilter拦截需要安全控制的URL,然后进行相应的控制,如果当前请求的url匹配 [urls]部分的某个url模式,将会执行其配置的拦截器,例如:anon(anonymous)拦截器表示匿名访问(即不需要登 录即可访问),authc (authentication)拦截器表示需要身份认证通过后才能访问。Shiro 内置了很多默认的拦截器,比如身份验证、授权等相关的。
shiro框架内置一系列的过滤器供使用,如下:org.apache.shiro.web.filter.mgt.DefaultFilter.java

shiro中默认的过滤器:

    这些过滤器分为两组,一组是认证过滤器,一组是授权过滤器,后面将会继续讲到。这些过滤器的API可以点击查看。实际开发中,我们可以自定义拦截器来扩展功能以满足项目需求,例如:动态url-角色/权限访问控制的实现、根据 Subject 身份信息获取用户信息绑定到 Request(即设置通用数据)、验证码验证、在线用户信息的保存等。


Shiro框架URL匹配

    由于ShiroFilter通过拦截需要安全控制的URL进行相应的控制,urls可能是shiro中处理web项目比较核心的部分。

RL配置格式

[urls]部分的配置,其格式是:”url=拦截器[参数],拦截器[参数]

URL匹配模式

url 模式使用 Ant 风格模式;
Ant 路径通配符支持 ?、*、**,注意通配符匹配不包括目录分隔符“/”:
    –?:匹配一个字符,如 /admin? 将匹配 /admin1,但不匹配 /admin 或 /admin/;
    –*:匹配零个或多个字符串,如 /admin 将匹配 /admin、/admin123,但不匹配 /admin/1;
    –**:匹配路径中的零个或多个路径,如 /admin/** 将匹配 /admin/a 或 /admin/a/b。

URL 匹配顺序

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

------------- The End -------------
  • 本文作者: 浪迹一生
  • 本文链接: https://www.syshlang.com/96db3174/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!