在《web安全-使用shiro做認證和訪問控制》 中,我簡單了說明了shiro的用法,今天來講下利用shiro怎麼實現記住我功能,如下圖:
如果勾選了記住我,那麼在關閉瀏覽器或伺服器重啟後,使用者開啟**會自動登入進去,無需再次輸入密碼。
據我了解,記住我功能應該是shiro把使用者資訊序列化到cookie中,傳到後台的時候再解密的。
/**
* rememberme管理器, cipherkey生成見
*/@bean
public cookieremembermemanager remembermemanager(******cookie remembermecookie)
/** * 記住密碼cookie
*/@bean
public ******cookie remembermecookie()
/** * session管理器(單機環境)
*/@bean
public defaultwebsessionmanager defaultwebsessionmanager(cachemanager cacheshiromanager)
利用securityutils工具類可以獲取資訊:
// 獲取資訊
return (userpagemodel) securityutils.getsubject().getprincipals().getprimaryprincipal();
// 是在shiro登入鑑權的時候放入的,就是從庫里查詢的user物件
usermodel user = loginservice.getloginuserbymobile(token.getusername());
******authenticationinfo info = new ******authenticationinfo(user, user.getpassword(), this.getname());
但是一般我們都是從session中獲取指定的key作為是否登入的依據,但是session超時、關閉瀏覽器或重啟伺服器後就不行了,所以我們要修改相應的**。
我們是統一了獲取session的方法,所以直接在這個方法中處理就好了。其他情況可以使用***解決。
public adminsessioninfo getsessioninfo()
userpagemodel shirouser = shiroutil.getsessionuser();
if (shirouser == null)
// 我們session中包裝了使用者部門、角色等資訊,所以還需要查庫一次(會先走快取)
adminsessioninfo sessioninfo = loginservice.getsessioninfobyuserid(shiroutil.getsessionuser());
if (sessioninfo != null)
return null;
}
記錄下配置過程,以及踩的坑。
有一些敏感性的操作,比如刪除資料、下單等,可以將許可權設定為authc級別,如果是記住我自動登入的,需要再次引導使用者輸入密碼確認。
可通過覆蓋shiro預設的authc級別***來實現。
如何安全實現「記住我」功能
1.利用token 原理 每次登入時為使用者生成乙個token並存放於cookie中,下次登入時,驗證token是否正確並自動登入 這樣每次生成時失效時間不同,token也不同 缺點 1.安全問題,當cookie被竊取 可以為cookie設定http only,防範xss csrf等攻擊 時,任何人...
記錄帖 Shiro 記住我 功能的有趣點
shiro提供了乙個rememberme功能,如下 usernamepasswordtoken.setrememberme rememberme subject.login usernamepasswordtoken 看似很簡單,但實際上有許多有趣的地方,我統計了一下 shrio會把使用者的sess...
記住我功能實現
一 登陸時記住我功能實現。1.首先在前端介面新增乙個單選框,當表單提交的時候會一起提交過來。同時單選框傳送的屬性值分為ture和false。submit id btnlogin value 登入 class login btn errormsg style font size 14px color ...