天天看點

SpringBoot-Shiro使用Shiro簡介基礎配置注意事項

Shiro簡介

Apache Shiro是Java的一個安全架構,詳細的教程可以看大神的

部落格

基礎配置

參考

這篇部落格

,就不在這裡贅述了。

注意事項

  • 問題:預設自定義AuthorizingRealm中service緩存不生效 

    解決方案:增加@Lazy注解,

    出處
  • 問題:多組織機構登陸參數傳遞,當使用者有多組織機構時登陸給予提示,并傳遞組織機構資訊到登陸頁面 

    解決方案:自定義異常,将查詢結果放到異常中傳遞到登陸頁面,異常資訊會傳遞到對應的登陸方法中,通過request.getAttribute("shiroLoginFailure")來擷取。

  • 問題:按鈕級權限處理 

    解決方案:通過給菜單指定資源名稱+配置菜單對應的permission 來實作,前端使用shiro:hasPermission="${資源名:權限名}"來控制按鈕顯示,controler端通過@RequiresPermissions("資源名:權限名")注解來控制通路權限

  • 問題:自定義filters不生效,執行順序異常 

    解決方案:

    1. 将過濾器的設定提到filterChainDefinitionMap之前,
    2. 不使用spring托管的模式管理過濾器使用new的方式初始化,spring托管會導緻過濾器執行順序異常
    3. 其它場景使用spring攔截器實作,而不使用過濾器
      Map<String, Filter> filters = shiroFilterFactoryBean.getFilters();
      //将自定義 的FormAuthenticationFilter注入shiroFilter中
      filters.put("authc", new AuthenticationFilter());
      shiroFilterFactoryBean.setFilters(filters);
      
      Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
      filterChainDefinitionMap.put("/logout", "logout"); 
      filterChainDefinitionMap.put("/**", "authc");
      shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);           
來自為知筆記(Wiz)