日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shiro扩展获得用户登录类型并提供cookie的方式记住用户密码

發布時間:2025/3/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shiro扩展获得用户登录类型并提供cookie的方式记住用户密码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在最近的項目中要實現一個需求:“同時讓兩種類型的用戶進行登錄,登錄后如果用戶勾選了記住密碼就要生成cookie來記錄用戶的密碼和用戶名”。本人做安全認證的時候一直在使用shiro,所以就想到在shiro的基礎上進行一些擴展來滿足需求。

shiro自帶的參數中有三個值,分別是username、password和rememberme,而自帶的rememberme使用的時候并沒有生成自定義cookie的能力,所以只能擴展一個自己的remember么來實現功能了。

代碼如下:


import org.apache.shiro.authc.UsernamePasswordToken; /**首先要擴展shiro默認提供的usernamePasswordToken,加入我們需要關心的字段*/ public class UserNamePassWordCookieToken extends UsernamePasswordToken {private static final long serialVersionUID = 1L;private boolean isRemember;//是否記住密碼private String loginType;//0為企業用戶,1為政務端用戶public UserNamePassWordCookieToken(String username, char[] password,boolean rememberMe, String host, boolean isRemember,String loginType) {super(username, password, rememberMe, host);this.setRemember(isRemember);this.loginType=loginType;}public boolean isRemember() {return isRemember;}public void setRemember(boolean isRemember) {this.isRemember = isRemember;}public String getLoginType() {return loginType;}public void setLoginType(String loginType) {this.loginType = loginType;}}


import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; import org.apache.shiro.web.util.WebUtils;/**我使用的 是表單驗證,所以這里擴展一下默認的FormAuthenticationFilter*/ public class FormAuthenticationCookieFilter extends FormAuthenticationFilter {public static final String DEFAULT_CAPTCHA_PARAM = "ck_rmbUser";//自定義的rememberme在form表單中的namepublic static final String DEFAULT_LOGINTYPE_PARAM = "loginType";//自定義的登錄類型在form表單中的nameprivate String isRememberParam = DEFAULT_CAPTCHA_PARAM;private String loginTypeParam = DEFAULT_LOGINTYPE_PARAM;public String getIsRememberParam() {return isRememberParam;}public void setIsRememberParam(String isRememberParam) {this.isRememberParam = isRememberParam;}public String getLoginTypeParam() {return loginTypeParam;}public void setLoginTypeParam(String loginTypeParam) {this.loginTypeParam = loginTypeParam;}protected boolean getIsRemember(ServletRequest request) {return WebUtils.isTrue(request, getIsRememberParam());//利用shiro的工具類來把form表單傳來的isRemember轉換為boolean值}protected String getLoginType(ServletRequest request) {return WebUtils.getCleanParam(request, getLoginTypeParam());//利用shiro的工具類獲得登錄類型}protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) {String username = getUsername(request);String password = getPassword(request);boolean isRemember = getIsRemember(request);String loginType = getLoginType(request);HttpServletRequest httpServletReqrest = (HttpServletRequest) request;HttpServletResponse httpServletResponse = (HttpServletResponse) response;try {if (isRemember) {//創建cookieCookie user = new Cookie("user", username + "-" + password+ "-" + loginType);// user.setMaxAge(60);user.setMaxAge(365*24*60*60);httpServletResponse.addCookie(user);} else {//清除cookieCookie[] cookies = httpServletReqrest.getCookies();for (Cookie cookie : cookies) {if (cookie.getName().equals("user")) {cookie.setValue(null);cookie.setMaxAge(0);// 立即銷毀cookieSystem.out.println("被刪除的cookie名字為:" + cookie.getName());httpServletResponse.addCookie(cookie);break;}}}} catch (Exception e) {e.printStackTrace();}boolean rememberMe = isRememberMe(request);//shiro自帶的rememberString host = getHost(request);return new UserNamePassWordCookieToken(username,password.toCharArray(), rememberMe, host, isRemember, loginType);}}



總結

以上是生活随笔為你收集整理的shiro扩展获得用户登录类型并提供cookie的方式记住用户密码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。