shiro web 体系结构

一、基本流程
  1. 主要依靠过滤器和拦截器来完全登录验证和鉴权
请求
shiro过滤器链
其他web过滤器
拦截器
controller
  1. shiro过滤器链
    每一个请求都会有自己的过滤器链,通过配置来完成
请求
过滤器1
过滤器2
过滤器n
二、shiro过滤器

在这里插入图片描述

  1. 基础过滤器:PathMatchingFilter,AdviceFilter,提供一些与具体业务无关的功能性过滤
  2. 验证过滤器:可以分为两类,
    • 是否允许进入系统:登录验证等
    • 是否允许访问controller方法:角色,权限等
  3. 常见的配置
    shiro提供的默认可以的过滤器枚举
public enum DefaultFilter {
    anon(AnonymousFilter.class),
    authc(FormAuthenticationFilter.class),
    authcBasic(BasicHttpAuthenticationFilter.class),
    logout(LogoutFilter.class),
    noSessionCreation(NoSessionCreationFilter.class),
    perms(PermissionsAuthorizationFilter.class),
    port(PortFilter.class),
    rest(HttpMethodPermissionFilter.class),
    roles(RolesAuthorizationFilter.class),
    ssl(SslFilter.class),
    user(UserFilter.class);
}

一般情况的过滤器配置,anno 等就是用的上面相对应的过滤器

 - /test.json|anon
 - /perms.json|perms[admin]
 - /logout|logout
 - /login|authc
 - /**|user
 
  1. 常用过滤器说明
过滤器说明
FormAuthenticationFilter登录验证过滤器,接收用户名,密码完成登录验证,只用于登录请求
UserFilter验证用户有没登录。 除了一些特殊url(像登录),其他url都应走次过滤器
AnonymousFilter不做任何验证可以进入系统。主要适用于一些特殊url
LogoutFilter登出操作,只用于登出请求
RolesAuthorizationFilter验证登入用户的角色,是否可以访问url
PermissionsAuthorizationFilter验证登入用户的权限,是否可以访问url
PathMatchingFilter通过匹配url决定是否进入过滤器。
AuthenticatingFilter与登录验证相关的过滤器,定义了登录流程
AccessControlFilter定义了shiro的登录和鉴权流程,其他过滤器是其具体实现
  1. 部分过滤器源码说明
    AccessControlFilter
public abstract class AccessControlFilter extends PathMatchingFilter {
   //进入业务流程之前验证权限和登录操作
   public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue);
    }
    //访问控制,是否允许正常通过过滤器,如已经认证的或不需要认证的请求
    protected abstract boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception;
    //对于不允许通过过滤器的请求进行权限验证,像登录逻辑,验证通过后则可通过过滤器
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        return onAccessDenied(request, response);
    }
}

三、拦截器

可以说,只用过滤器就可以完成web项目的登录和鉴权功能。拦截器可能在非web上更有用处。这里只简单总结一下

  1. 通过aop来实现对方法的拦截
  2. 通过注解来设置权限
注解作用
RequiresAuthentication要求必须是当前登录着的用户
RequiresGuest要求用户必须是访客
RequiresPermissions要求用户必须匹配相应的权限
RequiresRoles要求用户必须匹配相应的角色
RequiresUser要求必须是该系统的有效的用户(可能曾经登录过,当前并不是登录状态)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值