shiro入门

本篇文章来自慕课网Shiro安全框架入门视频教程,以下内容为作者观看视频后总结内容。

一、什么是Shiro

  • Apache下的一个强大灵活的开源安全框架
  • 认证、授权、企业会话管理、安全加密
  • 可以帮助快速完成权限管理模块的开发
二、Shiro与Spring Security比较
  • 前者简单、灵活-----------后者复杂、笨重
  • 前者可以脱离spring------后者不可脱离spring
  • 前者权限控制粒度较粗--后者权限控制力度较细
三、Shiro架构图
    Shiro通过security Manager管理。
    Authenticator:认证器,管理登入与登出。
    Authorizer:授权器,赋予主体拥有哪些权限
    Session Manager:会话管理器
    Session Dao:提供session操作,包括增删改查
    Cache Manager:缓存管理器
四、Shiro认证
1、首先生成一个简单的认证代码,如下。
public class AuthenticationTest {

    SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
    
    @Before
    public void add(){
        simpleAccountRealm.addAccount("yxf", "123");
    }
    
    @Test
    public void testAuthentication(){
        //1.构建SecurityManager环境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        defaultSecurityManager.setRealm(simpleAccountRealm);
        
        //2.主体提交认证请求
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        Subject subject = SecurityUtils.getSubject();
        
        UsernamePasswordToken token = new UsernamePasswordToken("yxf", "123");
        subject.login(token);
        
        System.out.println("isAuthenticated:" + subject.isAuthenticated());
        
    }
}

在上面代码中可见的认证过程,

  1、创建一个Realm,并将用户名与密码添加进去。

  2、构建SecurityManager环境,将Realm放入安全管理环境中。

  3、接收主体提交来的认证请求(这里我们为了方便测试使用手动创建的token)。

  4、对请求进行认证。

认证结果:

  1、用户已登录:方法将返回true。

  2、用户未登录:方法将返回false。

  2、用户名不正确:在login方法中,程序将抛出异常org.apache.shiro.authc.UnknownAccountException(未知的用户)。

  3、密码不正确:在login方法中,程序将抛出异常org.apache.shiro.authc.IncorrectCredentialsException(非法凭证)。

  4、用户名密码都不正确:同2.

五、Shiro授权

生成一个简单授权代码,如下

public class AuthenticationTest {

    SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
    
    @Before
    public void add(){
        simpleAccountRealm.addAccount("yxf", "123", "admin", "user");
    }
    
    @Test
    public void testAuthentication(){
        //1.构建SecurityManager环境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        defaultSecurityManager.setRealm(simpleAccountRealm);
        
        //2.主体提交认证请求
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        Subject subject = SecurityUtils.getSubject();
        
        UsernamePasswordToken token = new UsernamePasswordToken("yxf", "123");
        subject.login(token);
        
        //认证
        System.out.println("isAuthenticated:" + subject.isAuthenticated());
        
        subject.checkRole("admin");
        subject.checkRole("user");
        subject.checkRoles("admin", "user");
    }
}

如上代码中,用户首先经过认证,认证通过,可以检查权限。可以一次检查一个权限,也可以一次检查多个权限。如果权限不存在,程序将抛出如下异常:

org.apache.shiro.authz.UnauthorizedException: Subject does not have role [user2](无法授权,找不到“user2”这样的角色)

猜你喜欢

转载自www.cnblogs.com/yxth/p/8986099.html