IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 记住我的登录状态实现 -> 正文阅读

[网络协议]记住我的登录状态实现

在网站中,http 请求是无状态的,也就是说,当用户1连接服务器并登录成功后,刷新网站重新连接的时候,仍需要重新登录,仅通过常规信息无法识别不同用户。而 cookies 的出现就是为了解决这种问题,实现网站上记住登录状态的功能,使用户在登录成功后的一段时间内不需要重新登录就可以访问网站。

实现思路

  1. 使用cookies方式实现:当用户登录成功后,服务器为客户端设置 cookie ,值由用户名和密码组成。当用户第二次访问网页时,就会把自动地把自己 cookies 一并发送给服务器,服务器通过携带的 cookies 数据就能识别当前用户。(用户名密码信息较为重要,记得进行加密,由服务器进行解密识别)
  2. 通过session方式实现:session 本质上也是通过 cookies 来实现的,区别在于 cookies 数据保存在客户端,而 session 数据保存在服务器端。当用户登录成功的时候,服务器保存一个 sessionid 值,并通过 Cookies 方式发送给客户端,设置有效时间为1个月,那么在今后的一个月中,客户端访问我的网站时会将这个 sessionid 值发送到我的服务器上进行验证,服务器判断是否存在在 sessionid ,存在就直接放行,不存在就跳转到登录界面进行重新登录。

代码实现

使用 HandlerInterceptor 拦截器预先处理请求

public class LoginHandle implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Cookie[] cookies = request.getCookies();
        // 没有保存cookies记录
        if(null == cookies){
            response.sendRedirect(request.getContextPath() + "/login");
            return false;
        }
        String sessionid = "";
        boolean isheve = false;
        for(Cookie cookie:cookies){
            if("sessionid".equals(cookie.getName())){
                sessionid = cookie.getValue();
                isheve = true;
                break;
            }
        }
        // 找不到sessionid,重新登录
        if(!isheve){
            response.sendRedirect(request.getContextPath() + "/login");
            return false;
        }
        // 此处进行数据校验
        // HttpSession session = request.getSession();
        // User username = (User) session.getAttribute(sessionid);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        return;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        return;
    }
}

实现 WebMvcConfigurer ,重写 addInterceptors() 方法来配置拦截器

@Configuration
public class LoginConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration registration = registry.addInterceptor(new LoginHandle());
        registration.addPathPatterns("/hi/*");
        registration.excludePathPatterns("/login");
    }
}

登录成功后保存session和设置cookies

@RequestMapping(value = "/chat", method = RequestMethod.POST)
    public String loginIntoChatRoom(User user, HttpServletRequest request, Model model,HttpServletResponse response){
        user = userService.validateUserPassword(user.getName(), user.getPassword());
        
        if (user == null){
            return "login";
        }
        
        // 登录判断逻辑
        // if(...) ...
        
		// 登录成功后保存session和设置cookies
        String uuid = UUID.randomUUID().toString();
        // 将登录用户信息保存到session中
        session.setAttribute(uuid,user);
        // 保存cookie,实现自动登录
        Cookie cookie_username = new Cookie("sessionid", uuid);
        // 设置cookie的持久化时间,30天
        cookie_username.setMaxAge(30 * 24 * 60 * 60);
        // 设置为当前项目下都携带这个cookie
        cookie_username.setPath(request.getContextPath());
        // 向客户端发送cookie
        response.addCookie(cookie_username);
        return "hi";
    }
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 19:15:44  更:2022-01-30 19:16:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:01:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码