源碼:https://github.com/huangshengz/myJavaDemo本例子參考:https://www.cnblogs.com/HowieYuan/p/9259638.html本例子驗證主要有兩個類,一個是自定義的攔截類ShiroConfig,在這裏咱們自定義了不少須要的操做。例如:角色權限路徑,登陸路徑等,一些具體的含義以下: * anon:無參,開放權限,能夠理解爲匿名用戶或遊客 * logout:無參,註銷,執行後會直接跳轉到shiroFilterFactoryBean.setLoginUrl(); 設置的 url * authc:無參,須要認證 * authcBasic:無參,表示 httpBasic 認證 * user:無參,表示必須存在用戶,當登入操做時不作檢查 * ssl:無參,表示安全的URL請求,協議爲 https * perms[user]:參數可寫多個,表示須要某個或某些權限才能經過,多個參數時寫 perms["user, admin"],當有多個參數時必須每一個參數都經過纔算經過 * roles[admin]:參數可寫多個,表示是某個或某些角色才能經過,多個參數時寫 roles["admin,user"],當有多個參數時必須每一個參數都經過纔算經過 * rest[user]:根據請求的方法,至關於 perms[user:method],其中 method 爲 post,get,delete 等 * port[8081]:當請求的URL端口不是8081時,跳轉到schemal://serverName:8081?queryString 其中 schmal 是協議 http 或 https 等等, * serverName 是你訪問的 Host,8081 是 Port 端口,queryString 是你訪問的 URL 裏的 ? 後面的參數第二個類是CustomRealm。它繼承了AuthorizingRealm類而且重寫了登陸驗證和權限驗證。在裏面咱們能夠自定義咱們的業務邏輯。這個類很是重要,由於在攔截類ShiroConfig裏,securityManager.setRealm(),就是把這個類注入進去,使得攔截能知道用戶信息。這個類doGetAuthenticationInfo 和 doGetAuthorizationInfo必定要區分明白,第一個是身份認證,例如登陸時就是它,而第二個是角色權限認證,在裏面咱們設置了角色權限。在登陸方法裏,很明確的把用戶信息放入到了UsernamePasswordToken裏,而doGetAuthenticationInfo進行身份認證時,用戶信息就從UsernamePasswordToken取。最後說一下整個流程:1. 項目啓動時,Shiro攔截器工廠類ShiroConfig已經成功的注入。2. 而後咱們登陸的時候,跳轉到login方法裏,數據會保存到UsernamePasswordToken裏面,主要是用戶名和用戶密碼。3. 而後就走到了CustomRealm類了的身份證方法doGetAuthenticationInfo,在這裏,咱們根據用戶名從數據庫裏拿到了用戶密碼與登陸密碼作比較,而後判斷密碼是否正確,而後放行,到此用戶登陸成功。4. 而後用戶訪問數據的時候,會調用CustomRealm的doGetAuthorizationInfo進行權限認證。