zoukankan      html  css  js  c++  java
  • SpringBoot整合Shiro 四:认证+授权

    搭建环境见: SpringBoot整合Shiro 一:搭建环境

    shiro配置类见: SpringBoot整合Shiro 二:Shiro配置类

    shiro整合Mybatis见:SpringBoot整合Shiro 三:整合Mybatis

     

    认证

    未授权时

    ShiroConfig中添加授权访问

      如果用户没有拥有 user:add 就无法访问add页面

        filterMap.put("/user/add","perms[user:add]");

      如果用户没有拥有 user:update 就无法访问 update 页面

        filterMap.put("/user/update","perms[user:update]");

      跳转到一个未授权的页面

        bean.setUnauthorizedUrl("/noauth");

    @Bean(name = "shiroFilterFactoryBean")
     public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager")DefaultWebSecurityManager defaultWebSecurityManager){
         ShiroFilterFactoryBean bean=new ShiroFilterFactoryBean();
         bean.setSecurityManager(defaultWebSecurityManager);
     ​
         Map<String ,String> filterMap = new LinkedHashMap<>();
     ​
         //授权
         filterMap.put("/user/add","perms[user:add]");
         filterMap.put("/user/update","perms[user:update]");
     ​
         filterMap.put("/user/*","authc");
     ​
         bean.setFilterChainDefinitionMap(filterMap);
     ​
         //未授权页面
         bean.setUnauthorizedUrl("/noauth");
     ​
         bean.setLoginUrl("/toLogin");
     ​
         return bean;
     }

     

    Controller中添加未授权页面

      使用 @ResponseBody 直接显示字符串

    @RequestMapping("/noauth")
     @ResponseBody
     public String unauthorized(){
         return "未授权无法访问";
     }

    测试未授权的访问

      登录root用户,开始访问2个页面

      add

      update

     

     

    授权

    数据库添加权限字段

     

    添加 perms(varchar)

     

    对应实体类pojo
     使用了Lombok
    package com.zy.pojo;
     ​
     import lombok.AllArgsConstructor;
     import lombok.Data;
     import lombok.NoArgsConstructor;
     ​
     @Data
     @AllArgsConstructor
     @NoArgsConstructor
     public class User {
         private int id;
         private String name;
         private String pwd;
         
         private String perms;
     ​
     }

    授权操作

    UserRealm 中 AuthorizationInfo(授权)

      授权的对象 SimpleAuthorizationInfo

       SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

      添加权限的方法 addStringPermission

       info.addStringPermission("user:add");

      拿到当前登录的对象(认证成功之后,可以获取到)

        Subject subject = SecurityUtils.getSubject();

      获取到User

        User currentUser = (User) subject.getPrincipal();

      设置当前用户的权限

        info.addStringPermission(currentUser.getPerms());

     //授权
    
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
         System.out.println("执行了=>授权doGetAuthorizationInfo");
     ​
         SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
         info.addStringPermission("user:add");
     ​
         //拿到当前登录的对象
         Subject subject = SecurityUtils.getSubject();
         //获取到User
         User currentUser = (User) subject.getPrincipal();
         //设置当前用户的权限
         info.addStringPermission(currentUser.getPerms());
     ​
         return info;
     }

     

    测试

    root(初始没有权限)

      可以访问add页面了,因为被授权了

      update仍然不行,因为没有权限

     

    张三(本身有add权限)

      可以访问add页面

      update不行

     

    王五(本身有update)

      add

      update

     都可以访问了

     

     

  • 相关阅读:
    Hdfs详解
    HDFS主要特性和体系结构
    HDFS简单入门
    使用docker搭建hadoop分布式集群
    HDFS理论及安装部署
    Android开发之模拟器genymotion安装apk出现错误: Install_failed_invalid_URI
    Android开发之最火的开源框架之一Xutils2详解(摘自开源作者官方介绍详解)
    Java开发之javaEE(java2EE)的介绍,java软件工程师初步阶段知识
    拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K
    Android开发必有功能,更新版本提示,检测是否有新版本更新。下载完成后进行安装。
  • 原文地址:https://www.cnblogs.com/kzyuan/p/12811366.html
Copyright © 2011-2022 走看看