Shiro框架从入门到实战代码(一)Shiro简介和基础应用

Shiro是一个强大的Java安全框架,涉及认证、授权、加密和会话管理。核心组件包括Subject、SecurityManager和Realm,它们分别代表当前用户、全局安全管理器和用户认证与权限认证器。使用Shiro,开发者可以通过Subject进行操作,SecurityManager则调度各种服务,并通过 Realm 自定义权限规则。
摘要由CSDN通过智能技术生成

一:Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密和会话管理。

Authentication:身份认证/登录,验证用户是不是拥有相应的身份
Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限,即判断用户是否能做事情,常见的如:
验证某个用户是否拥有某个角色,或者细粒度的验证某个用户对某个资源是否具有某个权限
Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有的信息都在会话中,会话可以是普通JavaSe环境的,也可以是web环境的

Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储

Shiro有三大核心组件:
Subject:当前用户,在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中
则需要通过Subject来提供基础的当前用户信息,所有的Subject都要绑定到SecurityManager上,与Subject的交互实际上是被转换成与SecurityManager的交互
SecurityManager:即所有Subject的管理者,可以看作是Shiro框架的全局管理组件,用于调度各种Shiro框架的服务,作用类似于SpringMVC中的DispatcherServlet,用于拦截所有请求并进行处理

Realm:是用户的信息认证器和用户的权限认证器,我们需要自己实现Realm来自定义的管理我们自己系统内部的权限规则,SecurityManager要验证用户,需要从Realm中获取用户,可以把Realm看作是数据源

三者之间的联系:
一个简单的shiro应用是,应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager
我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断

Authenticator:认证器,负责主体认证的
Authrizer:授权器

public class ShiroTest {
    public static void main(String[] args) {
        Factory<SecurityManager> factory =
                new IniSecurityManagerFactory("classpath:shiro.ini");  
     //要指定读取的配置文件,返回的是一个Factory对象
        SecurityManager securityManager = factory.getInstance();
      //调用Factory的getInstance()方法获得SecurityManager
        SecurityUtils.setSecurityManager(securityManager);
 //通过SecurityUtils的setSecurityManager把SecurityManager绑定到上下文中
        Subject subject = SecurityUtils.getSubject();
  //获得与当前系统进行交互的对象
        UsernamePasswordToken token = new UsernamePasswordToken("test", "000000");
        try {
            subject.login(token);//登录操作
            if (subject.isAuthenticated()) {
                System.out.println("登录成功");
                if (subject.hasRole("admin")) {
                    System.out.println("有admin角色");
                } else {
                    System.out.println("没有admin角色");
                }
                if(subject.isPermitted("search")){
                    System.out.println("有search权限");
                }else{
                    System.out.println("没有search权限");
                }
                if(subject.isPermittedAll("del","update")){
                    System.out.println("有\"del\",\"update\"权限");
                }else{
                    System.out.println("没有\"del\",\"update\"权限");
                }
            }
        } catch (AuthenticationException e) {
            //e.printStackTrace();
            System.out.println("用户名或密码错误,登录失败");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值