美文网首页
Shiro Subject详解

Shiro Subject详解

作者: 虾米咬小米 | 来源:发表于2020-07-15 17:55 被阅读0次

    Shiro中认证授权组件Subject,为我们提供了当前用户、角色和授权的相关信息,可以进行登录,退出,权限验证,获取用户信息,session.。通常我们会将Subject对象理解为一个用户,同样的它也有可能是一个三方程序,它是一个抽象的概念,可以理解为任何与系统交互的“东西”都是Subject。

    获取Subject

    Subject subject = SecurityUtils.getSubject(); 
    

    subject主要接口

    Subject login(Subject subject, AuthenticationToken authenticationToken) throws AuthenticationException;    //登陆
    void logout(Subject subject);        //退出登陆
    Subject createSubject(SubjectContext context);    //获取subject
    

    subject作用

    1. 获得Session对象

    Session session = subject.getSession();
    session.setAttribute( "key", "aValue" );
    

    这里的Session并不是HttpSession,而是shiro为我们提供的,它的操作与HttpSession一样,他们最大的区别就是shiro session不需要依赖http服务器。

    2. 得到当前登录的用户名

    String currentUser = SecurityUtils.getSubject().getPrincipal().toString();
    System.out.println("当前登录的用户是:"+currentUser);
    

    3. 校验当前用户的权限

    //判断用户是否是拥有某种角色
    boolean isRole = subject.hasRole( "admin" );
    //是否拥有某种功能
    boolean isPer = subject.isPermitted("xiaoming:run");
    

    4. 退出登录

    //退出登录
    subject.logout();
    

    注解式授权

    1\. @RequiresAuthentication
    
    要求当前Subject已经在session中验证通过(验证当前用户是否登录:subject.isAuthenticated() 结果为true)
    
    2\. @RequiresUser
    
    验证用户是否被记忆
    
    3\. @RequiresGuest
    
    用户没有登录认证或被记住过,验证是否是一个guest的请求,与@RequiresUser完全相反。换言之,RequiresUser == !RequiresGuest。此时subject.getPrincipal() 结果为null.
    
    4\. @RequiresPermissions
    
    验证用户是否具有一个或多个权限,该注解将会经常在项目中使用,如果不满足条件则抛出AuthorizationException异常
    
    5\. @RequiresRoles
    
    验证当前用户是否具有某角色,与验证权限类似
    

    参考:
    shiro原理

    相关文章

      网友评论

          本文标题:Shiro Subject详解

          本文链接:https://www.haomeiwen.com/subject/oiyjhktx.html