中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在SpringBoot中實現Shiro授權

發布時間:2021-05-31 17:45:38 來源:億速云 閱讀:157 作者:Leah 欄目:編程語言

怎么在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;
  }

看完上述內容,你們掌握怎么在SpringBoot中實現Shiro授權的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大英县| 蓬安县| 舟山市| 平遥县| 邹城市| 昂仁县| 永靖县| 马尔康县| 资阳市| 临沧市| 九龙坡区| 平潭县| 怀仁县| 新蔡县| 库尔勒市| 建始县| 忻城县| 丰原市| 绥化市| 竹溪县| 中山市| 新津县| 思茅市| 汉源县| 修武县| 得荣县| 铜梁县| 嵊州市| 定襄县| 阳曲县| 彩票| 岗巴县| 缙云县| 恭城| 中山市| 嘉定区| 班玛县| 安庆市| 云阳县| 时尚| 沁水县|