DefaultFilter
shiro中提供的默认filter
FilterChainManager
通过配置创建对应的filterChain
Shiro通过此配置可初始化FilterChainManager中的filterChain,结构为 url ->filter列表
SpringShiroFilter
入口filter,拦截所有请求,通过请求的url匹配到对应的filterChain,然后通过Chain对请求进行,认证或者授权的处理
OncePerRequestFilter
OncePerRequestFilter 用于防止多次执行 Filter;也就是说一次请求只会走一次拦截器链;
另外提供 enabled 属性,表示是否开启该拦截器实例
实现了doFilter方法,提供了抽象方法doFilterInternal。
在doFilter中验证当前的Filter有没有执行过,如果已经执行过一次或者当前filter被禁用,则直接执行下一个Filter。如果没有执行过则执行doFilterInternal方法
AbstractShiroFilter
创建Subject,绑定subject到当前线程,根据url获取filterChain并执行filterChain
PathMatchingFilterChainResolver
通过请求的url来匹配FilterChainManager中的FilterChain,这个方法会返回一个ProxiedFilterChain
ProxiedFilterChain
存储了tomcat的Filter 和shiro内部的filter
shiro内部的过滤器执行完后会切换到tomcat的过滤器继续执行
默认filter
除了LogoutFilter,其他都继承了AdviceFilter
AdviceFilter
AdviceFilter 提供了 AOP 风格的支持,类似于 SpringMVC 中的 Interceptor:
权限验证在preHandle中实现
PathMatchingFilter
PathMatchingFilter 提供了基于 Ant 风格的请求路径匹配功能及拦截器参数解析的功能,如
“/admin roles[admin,user]”自动根据“,”分割,解析成 /admin -> [admin,user] 存入appliedPaths中
实现了preHandle方法,通过请求的url匹配url对应的权限,解析权限串 调用子类的onPreHandle对权限进行处理
AnonymousFilter
提供匿名访问功能,实现了onPreHandle直接返回true,所以配置anon的url任何人都可以访问
AccessControlFilter
提供了资源访问控制的基础功能
实现了onPreHandle,这里拆分出了
isAccessAllowed(是否允许访问)和onAccessDenied(访问被拒绝时)这两个方法供子类实现
AuthenticationFilter
实现了isAccessAllowed方法,验证用户是否已经登录,没有登录将被拒绝
FormAuthenticationFilter
继承自AuthenticationFilter只有用户登录过后才能通过
实现了onAccessDenied方法,如果请求的地址是登录地址,这里会尝试自动登录,否则跳转到登录页面
BasicHttpAuthenticationFilter
提供了基于 HttpBasic认证的方式
AuthorizationFilter
实现了onAccessDenied方法,如果没有认证通过,则跳转到登录或者认证失败的页面
PermissionsAuthorizationFilter
对用户所访问资源的权限进行认证
HttpMethodPermissionFilter
将HTTP请求的方法(例如GET、POST等)转换为相应的动作并构造一个相应的权限
如get 被转换为 read,put 转换为 update,post转换为create等
权限配置:/users perms[users]
请求: get /users
将会验证 用户是否拥有users:read权限
RolesAuthorizationFilter
验证用户是否用对对应的角色
UserFilter
实现了isAccessAllowed和onAccessDenied方法,验证用户是否登录过,如果验证未通过则跳转到登录页面