Web安全 Shiro 記住我功能

2021-09-23 01:38:54 字數 1636 閱讀 9556

在《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 ...