原创 無限級菜單/權限樹該如何設計

前言在開發中我們經常會遇到:導航菜單、部門菜單、權限樹、評論等功能。這些功能都有共同的特點:有父子關係可無限遞歸我們以導航菜單爲例, 我們將導航菜單設置爲動態的, 即從動態加載菜單數據。數據庫設計適用於數據庫存儲的設計如下:create t

原创 Shiro 拓展之 Restful URL 鑑權

前言在使用 Shiro 的過程中,遇到一個痛點,就是對 restful 支持不太好,也查了很多資料,各種各樣的方法都有,要不就是功能不完整,要不就是解釋不清楚,還有一些對原有功能的侵入性太強,經過一番探索,算是最簡的配置下完成了需要的功能,

原创 LeetCode 344 Reverse String

題意 翻轉字符串。 解法兩個指針,分別在首和尾,都向中間走,直到首超過尾。class Solution { public String reverseString(String s) { char[] chars

原创 LeetCode 557 Reverse Words in a String III

題意 給定一個字符串, 翻轉字符串中的每個單詞, 每個單詞以空格分隔, 保留空格和初始單詞順序。 解法首先按照空格對字符串進行分隔,然後將每個單詞進行翻轉後再拼接回字符串即可,需要注意拼接時記得加空格,但最後一個單詞不需要加。class

原创 LeetCode 657 Robot Return to Origin

題意 其實就是給一個字符串, 每個字符包含 “U”、”D”、”L”、”R”, 分別表示上下左右, 表示機器人向這個位置走一步, 判斷最終是否機器人是否還在原來的位置。 解法這道題很簡單,只需要假設當前節點是 0, 0,定義兩個變量, i

原创 LeetCode 709 To Lower Case

題意 傳入字符串,將其小寫形式。 解法根據 ASCII 碼判斷並返回即可,大寫 A - Z 爲 065 - 090,小寫 a - z 爲 097 - 122,正好相隔 32,當爲大寫時,將 ASCII 碼 + 32 即可。class So

原创 LeetCode 804 Unique Morse Code Words

題意 給予一個編碼表,26 個字母分別對應一個編碼,給定一組單詞,獲取單詞的所有字母組合後的編碼中不重複的數量。 解法首先爲每個單詞的每個字符進行轉碼, 將轉碼後的數據放到 Set 集合中, 最後返回 Set 的長度。class Solu

原创 LeetCode 929 Unique Email Addresses

題意 給與一組 email 地址,email 分爲兩部分, @ 前我們稱爲 local name, @ 後稱爲 domain name。現規定只可以出現小寫字母和字符 .、+。 其中 . 可以忽略, 如 `alice.z@leetcode.

原创 Shiro 集成 Spring 之會話管理

前言Shiro 提供了完整的會話管理功能,可以在不依賴底層容器,不僅可以在 WEB 環境下使用 Session,還可以在 JavaSE 環境下使用,且提供了會話管理,會話事件監聽,會話持久化,過期支持。會話操作所謂會話,即用戶訪問應用時保持

原创 Shiro 進階之從數據庫讀取過濾器鏈

我們之前使用過濾器鏈都是在 XML 中手動添加和維護的,本章我們來介紹下如何從數據庫讀取這些過濾器配置,這樣做的好處是便於維護,且可以通過程序來添加過濾器配置,因爲我們只需要添加一條記錄到數據庫即可。回顧下,之前我們是這樣配置的:<bean

原创 Shiro 集成 Spring 之授權緩存

前言在 手擼 Java Web RBAC 權限管理 中,我們自己實現了一個簡易的 RBAC 權限管理框架,且我們也提到了一些缺陷,其中一點就是 : 每次請求需要授權的頁面都會去數據庫查詢此用戶對應的權限數據和角色數據,太耗費資源,應該進行

原创 Shiro 集成 Spring 之記住我

我們經常在登陸網站時看到一個選項,就是 記住我、 n天內自動登陸。本章我們使用 Shiro 來實現這個功能。首先需要在 spring-shiro.xml 中配置:<bean id="rememberMeManager" class="or

原创 Shiro 集成 Spring 之註解

前言集成 Spring 後我們通過過濾器鏈來配置每個 URL 需要的權限,但當配置多了以後就會不方便,而且只支持 URL 級別的配置。好在 Shiro 提供了相應的註解用於權限控制,此處使用了 Spring MVC 來測試Shiro註解,當

原创 Shiro 集成 Spring 之過濾器

前言在之前 Shiro 集成 Spring 這一章中我們簡單使用了 shiroFilter 中的 filterChainDefinitions 來做 認證 和 授權 的攔截,其實還有許多過濾器,可以做各種各樣的攔截,並且 Shiro 還提供