shiro_token

shiro_token 学习

shiro_token

shiro 简书

SpringBoot之Shiro注解使用

shiro 笔记

二、 Shiro 架构原理

必须会。Shiro学习的重中之重。

1 第一行

第一行中示例出了一些语言。无论是什么语言都需要包含Subject

2 Subject

主体。每个用户登录成功后都会对应一个Subject对象,所有用户信息都存放在Subject中。可以理解:Subject就是Shiro提供的用户实体类。

2.1 ShiroUtil
 * @Description shiro工具类
 */
public class ShiroUtil {
   
   /**
    * @Description 获得shiro的session
    * @param
    * @return
    */
   public static Session getShiroSession() {
      return SecurityUtils.getSubject().getSession();
   }
   
   /**
    * @Description 获得shiro的sessionId
    * @param
    * @return
    */
   public static String getShiroSessionId() {
      return getShiroSession().getId().toString();
   }
   
   /**
    * @Description 是否登陆
    * @param
    * @return
    */
   public static Boolean isAuthenticated(){
      Subject subject = SecurityUtils.getSubject();
      return subject.isAuthenticated();
   }

}
2.2shiroUserUtil
public class ShiroUserUtil extends ShiroUtil{
   
   /**
    * @Description 返回当前登录用户封装对象
    * @param
    * @return
    */
   public static ShiroUser getShiroUser() {
      //System.out.println(SecurityUtils.getSubject());
      if (!EmptyUtil.isNullOrEmpty(ThreadContext.getSubject()) && !EmptyUtil.isNullOrEmpty(SecurityUtils.getSubject().getPrincipal())) {
         return (ShiroUser)SecurityUtils.getSubject().getPrincipal();
      }else {
         return new ShiroUser(SuperConstant.ANON_ID, SuperConstant.ANON_LOGIN_NAME);
      }
   }
   
   /**
    * @Description 获得shiroUserId
    * @param
    * @return
    */
   public static String getShiroUserId() {
      ShiroUser shiroUser = ShiroUserUtil.getShiroUser();
      if (EmptyUtil.isNullOrEmpty(shiroUser)) {
         return null;
      }else {
         return shiroUser.getId();
      }
   }
   

   /**
    * @Description 更新登录用户信息  用户id 和用户登录名不更新
    * @param shiroUser 需要修改对象
    * @return
    */
   public static void updateShiroUser(ShiroUser shiroUser){
      String subjectKey = "org.apache.shiro.subject.support.DefaultSubjectContext_PRINCIPALS_SESSION_KEY";
      Subject subject = SecurityUtils.getSubject();
      Object ooo = subject.getSession().getAttribute(subjectKey);
      SimplePrincipalCollection collection = (SimplePrincipalCollection)ooo;
      ShiroUser user = (ShiroUser)collection.getPrimaryPrincipal();
      subject.getSession().setAttribute(subjectKey, collection);
   }
   
}
2.3一些方法
SecurityUtils.getSubject().getSession();// 获取session
SecurityUtils.getSubject().getSession().getId().toString(); // 获取sessionID
subject.getPrincipal(); // 获取认证时传递的数据。
 
 
subject.login();登陆时传递的参数.
subject.isAuthenticated();
 
subject.hasRole(parm...);
subject.checkRole(param...);
 
subject. isPermitted(param..);
subject. checkPermissions(param..);

3.Security Manager

Shiro最大的容器,此容器中包含了Shiro的绝大多数功能。在非Spring Boot项目中,获取Security Manager 是编写代码的第一步。而在Spring Boot中已经帮助我们自动化配置了。

4 Authenticator

认证器。执行认证过程调用的组件。里面包含了认证策略。

5 Authorizer

授权器。执行授权时调用的组件。

6 Session Manager

Shiro被Web集成后,HttpSession对象会由Shiro的Session Manager进行管理。

7 Cache Manager

缓存管理。Shiro执行很多第三方缓存技术。例如:EHCache等。

8 Session DAO

操作Session内容的组件。

9 Realms

Shiro框架实现权限控制不依赖于数据库,通过内置数据也可以实现权限控制。但是目前绝大多数应用的数据都存储在数据库中,所以Shiro提供了Realms组件,此组件的作用就是访问数据库。Shiro内置的访问数据库的代码,通过简单配置就可以访问数据库,也可以自定义Realms实现访问数据库逻辑(绝大多数都这么做)
22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值