Shiro中的filter

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

实现了isAccessAllowedonAccessDenied方法,验证用户是否登录过,如果验证未通过则跳转到登录页面

猜你喜欢

转载自my.oschina.net/u/1168037/blog/1791155