shiro的登錄與退出非常簡單,在這里簡單給出代碼,更詳細(xì)可以參考官網(wǎng)。
(1) 用戶的登錄
- public void login(User user, HttpServletRequest request, HttpServletResponse response) {
- user.encodePassword();
- baseLogin(user, request, response);
- }
-
- public void baseLogin(User user, HttpServletRequest request, HttpServletResponse response) {
-
- try {
- Subject subject= SecurityUtils.getSubject();
- if (subject.isAuthenticated()) {
- return;
- }
- //如果用戶已登錄,先踢出
- ShiroSecurityHelper.kickOutUser(user.getUsername());
-
- boolean rememberMe = ServletRequestUtils.getBooleanParameter(request, "rememberMe", false);
- UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword(), rememberMe);
- subject.login(token); // 登錄
- } catch (Exception e) {
- //做一些異常處理
- }finally{
- ShiroAuthorizationHelper.clearAuthorizationInfo(sessionUser.getUsername());
- }
- }
這里需要注意的是在調(diào)用subject的login方法,其中傳給
UsernamePasswordToken的用戶密碼應(yīng)該是加密的,因?yàn)橥ǔN覀償?shù)據(jù)庫保存的密碼是加密后的,否則,將會登錄不成功。當(dāng)調(diào)用subject的login方法進(jìn)行用戶認(rèn)證明,shiro將會調(diào)用我們息定義的realm相關(guān)方法,前面的文章也有介紹。上面的rememberMe會在下篇文章提到。當(dāng)然,在登錄之前,我們還應(yīng)該做一些驗(yàn)證,比如用戶輸入的用戶名密碼是否為空,用戶的有效期之類的,在這里不給出。
(2)用戶退出
- public void logout() {
- Subject subject = SecurityUtils.getSubject();
- if (subject.isAuthenticated()) {
- subject.logout(); // session 會銷毀,在SessionListener監(jiān)聽session銷毀,清理權(quán)限緩存
- if (LOG.isDebugEnabled()) {
- LOG.debug("用戶" + username + "退出登錄");
- }
- }
- }
只要簡單調(diào)用subject的logout方法就可以了。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。