Shiro簡介
Apache Shiro是Java的一個安全架構,詳細的教程可以看大神的
部落格基礎配置
參考
這篇部落格,就不在這裡贅述了。
注意事項
-
問題:預設自定義AuthorizingRealm中service緩存不生效
解決方案:增加@Lazy注解,
出處 -
問題:多組織機構登陸參數傳遞,當使用者有多組織機構時登陸給予提示,并傳遞組織機構資訊到登陸頁面
解決方案:自定義異常,将查詢結果放到異常中傳遞到登陸頁面,異常資訊會傳遞到對應的登陸方法中,通過request.getAttribute("shiroLoginFailure")來擷取。
-
問題:按鈕級權限處理
解決方案:通過給菜單指定資源名稱+配置菜單對應的permission 來實作,前端使用shiro:hasPermission="${資源名:權限名}"來控制按鈕顯示,controler端通過@RequiresPermissions("資源名:權限名")注解來控制通路權限
-
問題:自定義filters不生效,執行順序異常
解決方案:
- 将過濾器的設定提到filterChainDefinitionMap之前,
- 不使用spring托管的模式管理過濾器使用new的方式初始化,spring托管會導緻過濾器執行順序異常
- 其它場景使用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);