当前位置: 首页 > 编程笔记 >

SpringBoot Shiro授权实现过程解析

贝滨海
2023-03-14
本文向大家介绍SpringBoot Shiro授权实现过程解析,包括了SpringBoot Shiro授权实现过程解析的使用技巧和注意事项,需要的朋友参考一下

这篇文章主要介绍了SpringBoot Shiro授权实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用Shiro过滤器实现授权

设置好授权拦截跳转的请求地址

/**
   * 创建ShiroFilterFactoryBean
   */
  @Bean
  public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
    ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean();
    //设置安全管理器
    shiroFilterFactoryBean.setSecurityManager(securityManager);
    
    //添加Shiro内置过滤器
    /**
     * Shiro内置过滤器,可以实现权限相关的拦截器
     * 常用的过滤器:
     *   anon:无需认证(登录)可以访问
     *   authc:必须认证才可以访问
     * user:如果使用rememberMe的功能可以直接访问
     * perms:该资源必须得到资源权限才可以访问
     * role:该资源必须得到角色权限才可以访问
     */  
    Map<String, String> filterMap= new LinkedHashMap<String,String>();
    
    
    //设置拦截后跳转的请求路径
    shiroFilterFactoryBean.setLoginUrl("/user/badRequest");
    //设置未授权提示的页面
    shiroFilterFactoryBean.setUnauthorizedUrl("/user/badRequest");
    shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
    return shiroFilterFactoryBean;
  }

再使用 filterMap 去放对应的拦截即可,例如 filterMap.put("/**", "anon")

上面是认证的,如果需要授权的,相应的多给一个任意的授权字符串如 filterMap.put("/user/add", "perms[user:add]")

授权逻辑编写的位置

/**
   * 执行授权逻辑
   */
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
    System.out.println("开始执行Shiro的授权方法...");
    
    //给资源进行授权
    SimpleAuthorizationInfo info= new SimpleAuthorizationInfo();
    
    //添加资源的授权字符串
    info.addStringPermission("user:add");
    
    return null;
  }

授权字符串和之前的字符串对应

补充

/**
   * 执行认证逻辑
   */
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {
    System.out.println("开始执行Shiro的认证方法...");    
    //编写Shiro判断逻辑,判断用户名和密码
    //判断用户名是否存在
    UsernamePasswordToken token=(UsernamePasswordToken)arg0;
    User user = userMapper.findByUsername(token.getUsername());
    if(user==null)
      return null;
    //判断密码是否正确,参数一为认证的实体
    return new SimpleAuthenticationInfo(user,user.getPassword(),"");
  }

在执行认证时的SimpleAuthenticationInfo第一个传参可以用来获取当前用户

/**
   * 执行授权逻辑
   */
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
    System.out.println("开始执行Shiro的授权方法...");
    
    //给资源进行授权
    SimpleAuthorizationInfo info= new SimpleAuthorizationInfo();
    
    //添加资源的授权字符串
    info.addStringPermission("user:register");
    
    //获取当前的登录用户
    User user=(User)SecurityUtils.getSubject().getPrincipal();        
    return null;
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍微信小程序的授权实现过程解析,包括了微信小程序的授权实现过程解析的使用技巧和注意事项,需要的朋友参考一下 自从小程序文档更新后,自动授权已不存在啦 目前的授权都是通过button来实现的,具体知识点可参考小程序的官方文档,以下是我做的一个小demo(进入首页,跳出一个登录弹出框,弹出框是自己写的一个UI组件),废话不多说,直接上代码 UI组件部分(modal) modal.wxml

  • 本文向大家介绍基于springboot实现整合shiro实现登录认证以及授权过程解析,包括了基于springboot实现整合shiro实现登录认证以及授权过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于springboot实现整合shiro实现登录认证以及授权过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.添加

  • 本文向大家介绍小程序实现授权登陆的解决方案,包括了小程序实现授权登陆的解决方案的使用技巧和注意事项,需要的朋友参考一下 前言 之前写过一个关于微信授权登陆的文章 传送门 最近在做小程序的项目,依旧是商城,又开始研究微信的登陆授权坑,第一次接触小程序,授权登陆也是一塌糊涂以后再慢慢的改进 场景 微信用户可以通过搜索进入小程序 也可以通过别人分享进入小程序 进入小程序之后需要用户授权拿到用户信息进行注

  • 本文向大家介绍php实现paypal 授权登录,包括了php实现paypal 授权登录的使用技巧和注意事项,需要的朋友参考一下 php实现paypal 授权登录 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍微信小程序授权登录解决方案的代码实例(含未通过授权解决方案),包括了微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了微信小程序授权登录解决方案的具体代码,供大家参考,具体内容如下 以上所述是小编给大家介绍的微信小程序授权登录解决方案详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的

  • 本文向大家介绍php实现微信小程序授权登录功能(实现流程),包括了php实现微信小程序授权登录功能(实现流程)的使用技巧和注意事项,需要的朋友参考一下 先上图 实现流程: 1、授权登陆按钮和正文信息放到了同一个页面,未授权的时候显示登陆按钮,已授权的时候隐藏登陆按钮,显示正文信息,当然也可以授权和正文分开成两个页面,在授权页面的onload里判断是否已授权,若已授权就直接跳转正文的页面。这里只说授