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

前言

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


1.Shiro框架默认过滤器

1.1.ShiroFilter的工作原理

ShiroFilter的工作原理

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

1.2.Shiro框架默认过滤器

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

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


2.Shiro框架URL匹配

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

2.1.RL配置格式

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

2.2.URL匹配模式

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

2.3.URL 匹配顺序

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