Java-使用Cookie实现登陆会话保持与注销功能_java 实现 扫码登录支付宝获取cookie 并且做cookie保活-程序员宅基地

技术标签: 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并且跳转到登陆页面啦!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gc1329689056/article/details/97920274

智能推荐

软件测试基础知识 —— 白盒测试-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏32次。白盒测试:白盒测试(White Box Testing)又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误,是进一步测试的前提。_白盒测试

嘿牛程序员__成都传智博客__包装类(二)_test6–自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程-程序员宅基地

文章浏览阅读1.8k次。---------------------- android培训、java培训、期待与您交流! ----------------------本节继续研究包装类前面说过实现字符输入流的包装类时,我们可以借助Reader和FileInputStream进行读取文件。我们继续介绍ReaderReader、InputStreamReader、FileReader三者的关系,是继承的关系。Fil_test6–自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程

文本挖掘学习笔记(一)—布尔检索_布尔检索例子-程序员宅基地

文章浏览阅读4.2k次。最近在学习文本挖掘,故而把书中关键的内容做个笔记,方便以后查阅。 信息检索是从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户需求的资料的(通常是文档)的过程。按照所处理的数据的规模,信息检索可以分为三个级别: 第一个级别是以web搜索为代表的大规模级别; 第二个级别是小规模,可以看成是与第一种规模相对的另一极端情况;_布尔检索例子

Linux源码解析-内存描述符(mm_struct)_mm_struct *mm-程序员宅基地

文章浏览阅读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

瞎想-电信IPTV如何做到真高清真4K直播_湖南电信iptv模糊-程序员宅基地

文章浏览阅读2.3w次。瞎想-电信IPTV如何做到真高清真4K直播前几天看电信IPTV,发现高清足球大镜头的时候,基本看不清球员号码,有时候球员的头都比较模糊。 我真的比较纳闷,电信都开始100M宽带起步了,为什么连10M的高清频道都无法展现好呢?我觉得IPTV肯定遇到了什么带宽瓶颈,但是具体瓶颈在哪,我不好说,也说不好。突然有个想法,IPTV是否能够参考广电的架构,完成高质量的直播呢? 甚至是4K直播。..._湖南电信iptv模糊

STM32寄存器开发-环境搭建_设计一个32位存储器模块的方法-程序员宅基地

文章浏览阅读1.9k次。From:http://bbs.elecfans.com/jishu_1102996_1_2.html概述 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,CM3采用了[url=]哈佛结构[/url][Ecube1] ,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。 _设计一个32位存储器模块的方法

随便推点

sed 简明教程_sed.exe移动匹配行-程序员宅基地

文章浏览阅读1.1k次。awk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了。所以 林妹妹跳了个Topless,他的哥哥sed坐不住了,也一定要出来抖一抖。sed全名叫stream editor,流编辑器,用程序的方式来编辑文本,相当的hacker啊。sed基本上就是玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强。同样,本篇文章不会说sed的全部东西,你可_sed.exe移动匹配行

Java总结进阶之路 (基础四)I/O流_java进阶之路-程序员宅基地

文章浏览阅读246次。输入流、输出流 笔记汇总_java进阶之路

BusyBox ifup udhcpc后台运行-程序员宅基地

文章浏览阅读183次。/********************************************************************** * BusyBox ifup udhcpc后台运行 * 说明: * 发现ifup会调用udhcpc,但是并不会切换到后台运行,解决一下。 * * ..._udhcpc 后台持续

使用oap切面导致controller被重复调用_joinpoint.proceed()报错-程序员宅基地

文章浏览阅读677次。在自测的时候发现某个很奇怪的问题,某个变量本该加1的变成了加2,debug后发现所有controller都被调用了两次,里面的方法也执行了两次。可以看到execution表达式定义了所有controller包,及改包下所有类的所有方法,joinPoint.proceed()后面经过排查发现写切面的时候,在环绕通知里调用了两次joinPoint.proceed()joinPoint.proceed()执行目标方法目标方法。修改原逻辑只执行一次joinPoint.proceed()......_joinpoint.proceed()报错

web前后端 http转https-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏14次。1.转换前准备http转https需要一个证书、本文已ssl证书举例,只有认证的证书才能被认可。阿里云可以申请免费的证书, 但是生成证书需要域名。且域名要绑定ip。故ssl申请前需要域名。可上阿里云购买。2.证书申请...

用MATLAB解决实际数学问题,利用MATLAB解决高等数学问题.doc-程序员宅基地

文章浏览阅读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解决高等数学问题