在最近的项目中要实现一个需求:“同时让两种类型的用户进行登录,登录后如果用户勾选了记住密码就要生成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的方式记住用户密码相关推荐

  1. php链接mysql实例之用户登录验证以及使用cookie登录

    这篇博客实现用户登录验证以及使用cookie登录,它承接了前面的几个博客: 1. php连接mysql实例之新用户注册实现 2. php连接mysql实例之后台列表显示已注册的用户信息 3. php连 ...

  2. 登录页面设置cookie,用户登录后,创建cookie保存用户信息

    代码要求: 用户登录后,创建cookie保存用户信息 设置cookie的有效期为5分钟 在登录页循环遍历cookie数组,判断是否存在指定名称的cookie,若存在则直接跳转至欢迎页面 代码实现过程: ...

  3. ajax登录验证的原理,ajax用户登录验证-get和post提交方式,与工作原理—2018-8-15...

    ajax用户登录验证: 实例 html> Ajax实战:表单验证 用户登录 邮箱: 密码: 提交 let btn = document.getElementsByTagName('button' ...

  4. 用户登录色一句java_SpringBoot中用SpringSecurity实现用户登录并返回其拥有哪些角色...

    注:在使用springsecurity之前我们用普通的登录方式 - _1 v2 C4 a8 h, m8 h6 q2 q+ l: [1.前端发来登录请求会带上username,password: M) ...

  5. vue登录如何存储cookie_vue保持用户登录状态(各种token存储方式)

    而作为前端,存储这些值同样有多种方式,你可以存在Cookie.LocalStorage.SessionStorage或者Vuex状态管理器中,当然他们的作用也不同 怎么设置Cookie HttpRes ...

  6. 基于IO流读取的 完成 用户登录,注册,修改,查看所有用户,删除功能

    Controller import java.util.Scanner;/*** 视图层* 完成用户登录,注册,修改,删除功能*/ public class Controller {/*** 字符输入 ...

  7. CMDB开发之用户登录登出的cookie校验

    django cookie session 我们要写一个cmdb被称为运维资源管理系统,BIM流程管理平台,类似这样的项目,很重要的点,就是用户画像,我们来描述参与业务的主体,和之间的关系.在这样的项 ...

  8. git登录报错,git clone无法记住用户名密码,修改git提交用户名

    目录 git登录报错 git无法记住用户名密码 修改git提交用户名 git登录报错 报错如下: 这种问题可能是因为你使用的电脑是之前别人用过的,git的用户信息存储的还是之前登录人的账户密码,所以导 ...

  9. java 用户登录token_Java,SpringBoot采用token方式实现登录认证

    IT小奋斗2021-01-13 21:48:33 Token,令牌,访问资源的凭证,每次访问带上这个令牌,就可识别出用户身份. JWT (JsonWebToken),是实现token技术的一种解决方案 ...

最新文章

  1. 中间件ROS/CyberRT/AutoSAR对比
  2. vistualSVN server:Windows下SVN服务器利器
  3. PyQt5 官方文档
  4. [LeetCode] 21. Merge Two Sorted Lists ☆
  5. [SpringBoot2]原生组件注入_原生注解与Spring方式注入
  6. NTIRE 2021 @CVPR 2021 Workshop 及挑战赛来了!
  7. [HTTP] HTTP是什么
  8. 如何通过“随航”将iPad用作苹果Mac的第二个显示屏?
  9. 计算机视觉应用培训心得体会,计算机视觉专题分享总结(附PPT)
  10. linux下淘宝支付宝安全控件安装
  11. windows8没有剪贴板查看器clipbrd怎么办?
  12. 掌握bandicam以及KMPlayer
  13. JS设计模式与开发实践
  14. CSS3颜色不透明度如何设置?
  15. 高仿富途牛牛-组件化(六)-炒鸡牛逼的布局记忆功能(序列化和反序列化)
  16. HEVC视频编码技术概述
  17. 评分卡模型(一)评分卡建模实战
  18. 材料专业转行适合做什么
  19. 新闻源软文的题材要定位清晰
  20. 通用技术计算机辅助设计教案,高中通用技术 “计算机辅助制图”教学设计 苏教版必修1...

热门文章

  1. Matlab guide菜单+快捷菜单的使用
  2. java移动端接口测试_借助Charles来测试移动端-下篇
  3. 高考python必考题目_假如高考考python编程,这些题目你会几个呢?
  4. HTML+CSS+JS实现 ❤️3D洞穴无限延伸动画特效❤️
  5. aidl使用_Android进阶之AIDL如何使用自定义类型
  6. 域控服务器取消验证_记一次域控服务器应急
  7. mysql crash定位分析_MySQL实例crash的案例详细分析
  8. 【youcans 的 OpenCV 例程 200 篇】101. 自适应中值滤波器
  9. 实践平台linux,关于构造Linux系统实践平台的设想
  10. php实现飘窗,JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)