
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文件中配置的<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>名称一致。
filterChainDefinitions 详解: 配置哪些页面需要受保护,以及访问这些页面需要的权限,主要包括以下权限:
anon 可以被匿名访问(即不需要登录就可以访问)
authc 必须认证(即登录)后才可能访问的页面
logout 登出
roles 角色过滤器
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 进行拦截。