亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

湖南省| 土默特右旗| 龙游县| 青阳县| 延安市| 大港区| 瑞安市| 松江区| 宝清县| 益阳市| 德庆县| 清水县| 马尔康县| 灵山县| 巢湖市| 古交市| 格尔木市| 宁远县| 顺义区| 汕尾市| 陵川县| 南召县| 丹东市| 信阳市| 阳泉市| 五华县| 马山县| 万山特区| 公主岭市| 郑州市| 衡南县| 沙田区| 沧源| 连山| 香河县| 铁岭县| 涡阳县| 赞皇县| 垣曲县| 砚山县| 吴川市|