天天看点

ShiroFilter工作原理、支持的过滤器、URL 匹配模式、URL 匹配顺序

ShiroFilter工作原理、支持的过滤器、URL 匹配模式、URL 匹配顺序

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

而要在Spring中使用<code>Shiro</code>的话,可在<code>web.xml</code>中配置一个<code>DelegatingFilterProxy</code>,<code>DelegatingFilterProxy</code>作用是自动到<code>Spring</code>容器查找名字为<code>shiroFilter</code>(<code>filter-name</code>)的<code>bean</code>并把所有<code>Filter</code>的操作委托给它。

前端发起的所有请求都会被ShiroFilter拦截到,访问时,如果有权限或者允许匿名访问,则可以直接访问,否则将会被重定向到 loginUrl(即访问到受保护的url并且没有权限)。

1、在web.xml配置文件中添加DelegatingFilterProxy拦截器:

2、在Spring配置文件中配置ShiroFilterFactoryBean:

注意:

id必须和web.xml文件中配置的&lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt;名称一致。

filterChainDefinitions 详解: 配置哪些页面需要受保护,以及访问这些页面需要的权限,主要包括以下权限: 

anon 可以被匿名访问(即不需要登录就可以访问)

authc 必须认证(即登录)后才可能访问的页面

logout 登出

roles 角色过滤器

ShiroFilter工作原理、支持的过滤器、URL 匹配模式、URL 匹配顺序

1、url 模式使用 Ant 风格模式

2、Ant 路径通配符支持 ?、 * 、 **,注意通配符匹配不 包括目录分隔符“/”:

?:匹配一个字符,如 /admin? 将匹配 /admin1,但不 匹配 /admin 或 /admin/;

 *:匹配零个或多个字符串,如 /admin 将匹配 /admin、 /admin123,但不匹配 /admin/1;

 **:匹配路径中的零个或多个路径,如 /admin/** 将匹 配 /admin/a 或 /admin/a/b

URL 权限采取第一次匹配优先的方式,即从头开始 使用第一个匹配的 url 模式对应的拦截器链。  如:

/bb/**=filter1

/bb/aa=filter2

/**=filter3

如果请求的url是“/bb/aa”,因为按照声明顺序进行匹 配,那么将使用 filter1 进行拦截。

继续阅读