SpringBoot Shiro授权实现过程解析

所属分类: 软件编程 / java 阅读数: 31
收藏 0 赞 0 分享

这篇文章主要介绍了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;
  }

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

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多