Apache Shiro 框架默认过滤器及 URL 匹配
前言
1.Shiro 框架默认过滤器
1.1.ShiroFilter 的工作原理
filterChainDefinitions 是 ShiroFilter 的属性,在 filterChainDefinitions 中可以对 Url 进行配置,看是否可以登录或安全权限的访问,详见后文。 由上图可以看出:浏览器过来的任何请求都会先经过 shiro 先过滤,先到达 AbstractShiroFilter.executeChain () 方法,去根据 request 解析出来的 url 找到对应的过滤链,然后执行过滤器链,直到成功才会执行 javaweb 本身的过滤器。
1.2.Shiro 框架默认过滤器
shiro 框架内置一系列的过滤器供使用,如下:org.apache.shiro.web.filter.mgt.DefaultFilter.java
shiro 中默认的过滤器:
这些过滤器分为两组,一组是认证过滤器,一组是授权过滤器,后面将会继续讲到。这些过滤器的 API可以点击查看。实际开发中,我们可以自定义拦截器来扩展功能以满足项目需求,例如:动态 url - 角色 / 权限访问控制的实现、根据 Subject 身份信息获取用户信息绑定到 Request(即设置通用数据)、验证码验证、在线用户信息的保存等。
2.Shiro 框架 URL 匹配
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 进行拦截。