技术标签: cookie实现登录 cookie
1.我们就来利用Cookie实现一个简单的会话保持与注销功能!首先看看普通的登录方法(真的是普通的不能再普通…)
@RequestMapping("login")
public String login(User user, Model model, HttpSession session, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
String loginname = user.getLoginname();
String password = user.getPassword();
Cookie cookie1 = new Cookie("loginname",loginname);
// Cookie cookie1 = new Cookie("name", URLEncoder.encode("哈哈", "UTF-8"));//存中文信息的时候需要这样设置编码
if (loginname!=null||password!=null){
Map<String, Object> map = loginService.login(loginname, password);
if (map.get("status").equals("200")) {
cookie1.setMaxAge(60*60);//这里设置设置有效时间,单位的秒,我这里是一小时
cookie1.setPath("/");//这里是之根目录下所有的目录都可以共享Cookie
response.addCookie(cookie1);//添加Cookie
return "system/index.jsp";
} else {
model.addAttribute("error", map.get("msg"));
return "login.jsp";
}
}else {
model.addAttribute("error","请输入账号密码");
return "login.jsp";
}
2.然后在你的拦截器里做一些判断就行~
package com.sixmai.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
//之前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
Cookie[] cookies = request.getCookies();//这里是取出Cookie
if ((cookies!=null)){//判断Cookie是否为空
for (Cookie cookie : cookies){//遍历Cookie判断有没有对应的name
if (cookie.getName().equals("loginname")){//有就直接return true
return true;
}
}
}
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
3.注销:很简单,当你点击注销的时候清除Cookie并跳转到登陆页面就行拉~
@RequestMapping("logout")
public String logout(HttpSession session,HttpServletRequest request,HttpServletResponse response){
// session.removeAttribute("loginname"); 消耗session
Cookie[] cookies = request.getCookies();
for (Cookie cookie :cookies){//遍历所有Cookie
if(cookie.getName().equals("loginname")){//找到对应的cookie
cookie.setMaxAge(0);//Cookie并不能根本意义上删除,只需要这样设置为0即可
cookie.setPath("/");//很关键,设置成跟写入cookies一样的,全路径共享Cookie
response.addCookie(cookie);//重新响应
return "login.jsp";
}
}
return "login.jsp";
}
这样写了以后当你点击注销就可以直接“清除”Cookie并且跳转到登陆页面啦!
文章浏览阅读4.4k次,点赞3次,收藏32次。白盒测试:白盒测试(White Box Testing)又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误,是进一步测试的前提。_白盒测试
文章浏览阅读1.8k次。---------------------- android培训、java培训、期待与您交流! ----------------------本节继续研究包装类前面说过实现字符输入流的包装类时,我们可以借助Reader和FileInputStream进行读取文件。我们继续介绍ReaderReader、InputStreamReader、FileReader三者的关系,是继承的关系。Fil_test6–自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程
文章浏览阅读4.2k次。最近在学习文本挖掘,故而把书中关键的内容做个笔记,方便以后查阅。 信息检索是从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户需求的资料的(通常是文档)的过程。按照所处理的数据的规模,信息检索可以分为三个级别: 第一个级别是以web搜索为代表的大规模级别; 第二个级别是小规模,可以看成是与第一种规模相对的另一极端情况;_布尔检索例子
文章浏览阅读1.7k次。转自https://blog.csdn.net/tiankong_/article/details/756761311.简介一个进程的虚拟地址空间主要由两个数据结构来描述。一个是最高层次的:mm_struct(定义在mm_types.h中),一个是较高层次的:vm_area_structs。最高层次的mm_struct结构描述了一个进程的整个虚拟地址空间。较高层次的结构vm_area_..._mm_struct *mm
文章浏览阅读2.3w次。瞎想-电信IPTV如何做到真高清真4K直播前几天看电信IPTV,发现高清足球大镜头的时候,基本看不清球员号码,有时候球员的头都比较模糊。 我真的比较纳闷,电信都开始100M宽带起步了,为什么连10M的高清频道都无法展现好呢?我觉得IPTV肯定遇到了什么带宽瓶颈,但是具体瓶颈在哪,我不好说,也说不好。突然有个想法,IPTV是否能够参考广电的架构,完成高质量的直播呢? 甚至是4K直播。..._湖南电信iptv模糊
文章浏览阅读1.9k次。From:http://bbs.elecfans.com/jishu_1102996_1_2.html概述 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,CM3采用了[url=]哈佛结构[/url][Ecube1] ,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。 _设计一个32位存储器模块的方法
文章浏览阅读1.1k次。awk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了。所以 林妹妹跳了个Topless,他的哥哥sed坐不住了,也一定要出来抖一抖。sed全名叫stream editor,流编辑器,用程序的方式来编辑文本,相当的hacker啊。sed基本上就是玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强。同样,本篇文章不会说sed的全部东西,你可_sed.exe移动匹配行
文章浏览阅读246次。输入流、输出流 笔记汇总_java进阶之路
文章浏览阅读183次。/********************************************************************** * BusyBox ifup udhcpc后台运行 * 说明: * 发现ifup会调用udhcpc,但是并不会切换到后台运行,解决一下。 * * ..._udhcpc 后台持续
文章浏览阅读677次。在自测的时候发现某个很奇怪的问题,某个变量本该加1的变成了加2,debug后发现所有controller都被调用了两次,里面的方法也执行了两次。可以看到execution表达式定义了所有controller包,及改包下所有类的所有方法,joinPoint.proceed()后面经过排查发现写切面的时候,在环绕通知里调用了两次joinPoint.proceed()joinPoint.proceed()执行目标方法目标方法。修改原逻辑只执行一次joinPoint.proceed()......_joinpoint.proceed()报错
文章浏览阅读2.3k次,点赞3次,收藏14次。1.转换前准备http转https需要一个证书、本文已ssl证书举例,只有认证的证书才能被认可。阿里云可以申请免费的证书, 但是生成证书需要域名。且域名要绑定ip。故ssl申请前需要域名。可上阿里云购买。2.证书申请...
文章浏览阅读3.4k次,点赞5次,收藏15次。利用MATLAB解决高等数学问题Matlab 大作业本人选择了利用MATLAB解决高等数学问题。极限计算limit(f,x,a): 求函数f在x趋于常数a时的极限;limit(f): 求函数f在x趋于0时的极限;limit(f,x,a,’right’): 求函数f在x趋于常数a时的右极限;limit(f,x,a,’left’): 求函数f在x趋于常数a时的左极限;具体计算如下:求极..._matlab7.0解决高等数学问题