Shiro中的filter

DefaultFilter

shiro中提供的默认filter

172713_a4vw_1168037.png

FilterChainManager

通过配置创建对应的filterChain

172727_ugQI_1168037.png

Shiro通过此配置可初始化FilterChainManager中的filterChain,结构为 url ->filter列表

172855_WOZI_1168037.png

 

SpringShiroFilter

入口filter,拦截所有请求,通过请求的url匹配到对应的filterChain,然后通过Chain对请求进行,认证或者授权的处理

172906_9m8W_1168037.png

OncePerRequestFilter

OncePerRequestFilter 用于防止多次执行 Filter;也就是说一次请求只会走一次拦截器链;

另外提供 enabled 属性,表示是否开启该拦截器实例

实现了doFilter方法,提供了抽象方法doFilterInternal

在doFilter中验证当前的Filter有没有执行过,如果已经执行过一次或者当前filter被禁用,则直接执行下一个Filter。如果没有执行过则执行doFilterInternal方法

AbstractShiroFilter

创建Subject,绑定subject到当前线程,根据url获取filterChain并执行filterChain

 

172922_U72N_1168037.png

172942_LTIB_1168037.png

PathMatchingFilterChainResolver

通过请求的url来匹配FilterChainManager中的FilterChain,这个方法会返回一个ProxiedFilterChain

173003_MBZh_1168037.png

ProxiedFilterChain

存储了tomcat的Filter 和shiro内部的filter

shiro内部的过滤器执行完后会切换到tomcat的过滤器继续执行

173017_mTtl_1168037.png

 

默认filter

173030_KHJ7_1168037.png

除了LogoutFilter,其他都继承了AdviceFilter

AdviceFilter

AdviceFilter 提供了 AOP 风格的支持,类似于 SpringMVC 中的 Interceptor:

173043_TvD5_1168037.png

权限验证在preHandle中实现

PathMatchingFilter

PathMatchingFilter 提供了基于 Ant 风格的请求路径匹配功能及拦截器参数解析的功能,如

/admin roles[admin,user]”自动根据“,”分割,解析成 /admin -> [admin,user] 存入appliedPaths

实现了preHandle方法,通过请求的url匹配url对应的权限,解析权限串 调用子类的onPreHandle对权限进行处理

173058_7mPw_1168037.png

173110_qO4T_1168037.png

AnonymousFilter

提供匿名访问功能,实现了onPreHandle直接返回true,所以配置anon的url任何人都可以访问

173120_9Css_1168037.png

AccessControlFilter

提供了资源访问控制的基础功能

实现了onPreHandle,这里拆分出了

isAccessAllowed(是否允许访问)和onAccessDenied(访问被拒绝时)这两个方法供子类实现

173136_vEls_1168037.png

AuthenticationFilter

实现了isAccessAllowed方法,验证用户是否已经登录,没有登录将被拒绝

173152_jWIa_1168037.png

FormAuthenticationFilter

继承自AuthenticationFilter只有用户登录过后才能通过

实现了onAccessDenied方法,如果请求的地址是登录地址,这里会尝试自动登录,否则跳转到登录页面

173203_bo3n_1168037.png

BasicHttpAuthenticationFilter

提供了基于 HttpBasic认证的方式

173212_Ccvg_1168037.png

 

AuthorizationFilter

实现了onAccessDenied方法,如果没有认证通过,则跳转到登录或者认证失败的页面

173220_vpu5_1168037.png

 

PermissionsAuthorizationFilter

对用户所访问资源的权限进行认证

173229_FlSn_1168037.png

HttpMethodPermissionFilter

将HTTP请求的方法(例如GET、POST等)转换为相应的动作并构造一个相应的权限

如get 被转换为 read,put 转换为 update,post转换为create等

权限配置:/users perms[users]

请求: get /users

将会验证 用户是否拥有users:read权限

173246_R42T_1168037.png

RolesAuthorizationFilter

验证用户是否用对对应的角色

173257_kmnf_1168037.png

UserFilter

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

173306_T0bl_1168037.png

173316_WOKu_1168037.png

 

转载于:https://my.oschina.net/u/1168037/blog/1791155

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值