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);}}




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ueditor跨域上传图片文件(基于jsp框架、tomcat)

额,好久没有用到ueditor了,因为现在的相关工作很少涉及到富文本编辑;最近临时带了一个项目,里面要用到富文本编辑器,而且文件要统一上传到文件服务器上保存;应为以前用过ueditor就试着在网上着一些跨域保存…

JavaWeb-RESTful_用SpringMVC开发RESTful

RESTful简介 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。 它主要用于客户端和服务器交互类的软件。 基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 RESTful可以理解为一种编…

在storm中使用流

storm是一个强大的流式计算框架,单流的storm在使用中非常普遍,而同时storm也提供对多个流的支持;通过定义多个流,用户可以进一步的把数据发放到不同的流中进行处理。 代码如下: 一、 定义多个流的spout public class…

精选Pycharm里6大神器插件

http://www.sohu.com/a/306693644_752099 上次写了一篇关于Sublime的精品插件推荐,有小伙伴提议再来一篇Pycharm的主题。相比Sublime,Pycharm要强大许多,而且是专为python设计的集成开发环境,所以无论是自身功能、环境配置还是使用…

在storm中使用定时保存

在storm中使用实时保存会对性能带来很大的考验,所以在很多场景中还是使用定时保存;而且storm自带了定时功能,使用方式如下: 首先在topo中的config中定义一个通信时间,定义方式如下: conf.put(Config.TOPOLO…

数字信号处理实验(一)——DTFT

一、离散序列傅里叶变化——DTFT 1、DTFT公式 2、Matlab算法实现 function[X]dtft(x,n,w,flag)%计算离散时间付里叶变换 %[X]dtft(x,n,w) %X在w频率点上的DTFT数组 %xn点有限长度序列 %n样本位置向量 %w频率点位置向量X x * (exp(-j).^(n * w));3、DTFT一些画图代码 function …

修改hadoop中yarn的webui中显示的任务时间为中国时间

在${HADOOP_HOME}\share\hadoop\yarn目录下找到hadoop-yarn-common-x.x.x.jar,然后用winRAR打开; 打开以后结构如下: 进入webapps/static/目录,然后修改yarn.dt.plugins.js;做出如下修改: (1&a…

一条语句复制整个目录《转》

使用的是 Delphi 2010 下 IOUtils 单元的 TDirectory.Copy 函数: 1 uses IOUtils; 2 3 procedure TForm1.Button1Click(Sender: TObject); 4 const 5 SourceDir C:\Temp\Folder1; { 源文件夹必须存在 } 6 DestDir C:\Temp\Folder2; { 如果目标文件夹不存在, 程序会自动…

设计模式与重构汇总

面向对象的基本原则:单一原则:引起一个类发生变化的原因只有一个 开放封闭原则:对于类的修改是封闭的,而对于类的扩展是开放的 依赖倒置原则:高层不依赖于底层,都应该依赖与抽象;抽象不依赖于…

转 最小凸包算法(Convex Hull)(1)-Graham扫描法 -计算几何-算法导论

原文地址:http://blog.csdn.net/suwei19870312/article/details/542281 基本问题: 平面上有n个点p1,p2, ..., pn, 要求求出一个面积最小的凸多边形,使得这个多边形包含所有平面上的点。 根据算法导论上提供的两个方法做一些介绍: …

Trident API 概览

Trident API 概览 在网上看到了很多有TRIDENT相关API的翻译,看来看去,总觉得没有说清楚很多东西,所以自己结合使用的经验翻译了一篇出来;翻译完以后,也发现 在自己的翻译中也有很多地方是表达不清楚的不过多少感觉有些…

poj 2406 还是KMP的简单应用

记住KMP是多计算一位的。其中next[i]为不为自身的最大首尾重复子串长度。 位移ji-next[i]可以看作是构成字符串s的字串(如果i%j0,存在这样的构成),相应的重复次数也就是n/d。 a b c d * next:-1 0 0 0 0 这时ji-next[i]; …

Trident State译文

Trident State 译文 Trident针对状态化的数据源的读写进行了一流的分装。State可以包含在拓扑中-例如,保存在内存中,有HDFS提供备份-也可以保存在一个外部的数据库中,像Memcached和Cassandra。针对以上的所有情况,Trident的API都…

远程访问数据库查询数据量一大就Hang

最近刚为客户升级了一套Oracle Database,一切进展顺利,眼看就要顺利验收时,发现有部分客户端软件连接新版本数据库时会Hang,问题非常诡异。 系统环境如下 升级前的环境OS:Windows Server 2003 DB:Windows Database Enterprise Edi…

storm-hbase jar包中的bolt节点源码解析

一段时间内,大家都是自己在storm的节点中实现对hbase的操作,不管是普通的topo还是在trident中都是这样;不知道从那个版本起,在storm的压缩包中就多出了好几个jar包,把针对habse,mysql,mongodb等…

软件之道:软件开发争议问题剖析

软件之道:软件开发争议问题剖析 基本信息 原书名: Making Software 原出版社: OReilly 作者: (美)Andy Oram Greg Wilson 译者: 鲍央舟 张玳 沈欢星丛书名: 图灵程序设计丛书出版社:人民邮…

如何理解矩阵

线性代数课程,无论你从行列式入手还是直接从矩阵入手,从一开始就充斥着莫名其妙。比如说,在全国一般工科院系教学中应用最广泛的同济线性代数教材(现在到了第四版),一上来就介绍逆序数这个“前无古人&#…

对于泛型的理解

如果希望构建一个集合容器,会用到ArrayList array new ArrayList(); ArrayList有几个缺点:1 无法保证容器中的类型安全(类型一致问题) 2 存进arralist的数据,CIL会自动进行装箱,也就是保存进ArrayList中的…

交通灯管理系统

题目需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1、异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向…

REDIS提供的map,list,set,sortedset使用测试

public class RedisTest {public JedisPool jedisPool null;public void init(){//创建配置信息JedisPoolConfig pool new JedisPoolConfig();//设置最大的总链接数pool.setMaxTotal(300);//设置最大空闲链接数pool.setMaxIdle(100);//设置最大等待时间pool.setMaxWaitMilli…