本次只是記錄一下啓用shiro配置過程遺忘掉的幾個關鍵點,首先項目是先後端分離的後臺,提供json格式的接口數據,但又是一個web項目,如今要控制登陸以後才能使用
一、ShiroFilterFactoryBean我這裏是一個自定義的,繼承ShiroFilterFactoryBean,重寫了setFilterChainDefinitions方法,由於動態權限數據是從數據庫查來的,下面說這個bean的loginUrl和unauthorizedUrl屬性,通常這倆個配置的是同樣的,這個屬性的值配置的/login,這個地址不必定要有,項目沒有這個requestmapping地址也沒有問題,關鍵在filterChainDefinitions裏面這個/login地址要配置成anon,項目用來登陸的接口也要在這裏配上anon,前端用的js和css,圖片地址要在這裏配置上anon,其它的所有是authc
二、若是有自定義的filter,配置filters的時候,entry裏的key要和filterChainDefinitions裏的有的對應上(好比前面用的authc),filterChainDefinitions裏用的驗證名,和自定義的filter用的key同樣的時候,這個filter纔會起做用
三、自定義的filter在重寫isAccessAllowed方法的時候,要判斷請求是否是ajax請求,是ajax請求沒有權限或登陸失效要用response返回json數據,不能跳轉登陸頁面,還有一點若是使用response裏的out返回給前端數據,那麼當前方法要return false,否則會報Cannot call sendError() after the response has been committed 這個錯
四、登陸的時候密碼驗證是本身些的realm中doGetAuthenticationInfo這個方法中,若是前面使用的UsernamePasswordToken登陸的,這裏的token能夠轉換成UsernamePasswordToken,從裏面拿到的用戶名和密碼,前面登陸建立UsernamePasswordToken的時候用的什麼參數,這裏就會拿到什麼css