SpringBoot Shiro授权实现过程解析

 更新时间:2019年11月12日 10:07:27   作者:涛先森の日常  
这篇文章主要介绍了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;
  }

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

相关文章

  • Logback如何将日志输出到Kafka配置示例

    Logback如何将日志输出到Kafka配置示例

    logback是一个功能强大的Java日志框架,它是log4j的继任者,提供了丰富的功能和配置选项,本文将介绍Logback将日志输出到Kafka配置示例,感兴趣的朋友一起看看吧
    2024-12-12
  • Java异常处理之java.lang.ClassCastException问题

    Java异常处理之java.lang.ClassCastException问题

    这篇文章主要介绍了Java异常处理之java.lang.ClassCastException问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java使用@Retryable注解实现HTTP请求重试

    Java使用@Retryable注解实现HTTP请求重试

    HTTP调用是Java应用与外部API进行交互时重要的访问方式之一,为了确保在遇到临时性问题时能自动重试,我们可以设计一个灵活的重试机制,在Java中,我们可以通过注解来实现这一功能,文将介绍如何使用注解@Retryable来实现HTTP调用的重试机制,需要的朋友可以参考下
    2024-10-10
  • mybatis-plus enum实现枚举类型自动转换

    mybatis-plus enum实现枚举类型自动转换

    本文主要介绍了mybatis-plus enum实现枚举类型自动转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • 解决java执行cmd命令调用ffmpeg报错Concat error - No such filter ''[0,0]''问题

    解决java执行cmd命令调用ffmpeg报错Concat error - No such filter ''[0,0]

    这篇文章主要介绍了java执行cmd命令,调用ffmpeg报错Concat error - No such filter '[0,0]'解决方法,本文通过截图实例代码说明给大家介绍的非常详细,对大家的工作或学习有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • java+selenium实现滑块验证

    java+selenium实现滑块验证

    现在越来越多的网站都使用采用滑块验证来作为验证机制,用于判断用户是否为人类而不是机器人,本文就将利用java和selenium实现滑块验证,希望对大家有所帮助
    2023-12-12
  • Java异常ClassCastException的解决

    Java异常ClassCastException的解决

    这篇文章主要介绍了Java异常ClassCastException的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java通过正则表达式获取字符串中数字的方法示例

    Java通过正则表达式获取字符串中数字的方法示例

    最近工作中遇到了一个需求,需要利用java获取字符串中的数字,尝试几种方法后发现利用正则表达式实现最为方法,下面这篇文章就主要介绍了Java通过正则表达式获取字符串中数字的方法,文中给出了详细的示例代码,需要的朋友可以参考下。
    2017-03-03
  • Java实战之网上书店管理系统的实现

    Java实战之网上书店管理系统的实现

    本文将利用Java语言实现网上书店管理系统。其功能一般包括:图书信息管理、用户信息管理、图书购买、图书订单查看、图书添加、图书维护等等,感兴趣的可以了解一下
    2022-06-06
  • 如何动态修改JavaBean中注解的参数值

    如何动态修改JavaBean中注解的参数值

    这篇文章主要介绍了如何动态修改JavaBean中注解的参数值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论