首页 > 其他分享 >Http、Https简介和Session、token的请求流程

Http、Https简介和Session、token的请求流程

时间:2022-12-04 21:45:03浏览次数:44  
标签:Http com request token Session import servlet response

Http

      Http (超文本输出协议) 是一种分布式、协作式和超媒体信息系统的应用层协议,它通常运行在TCP之上,因特网应用最广泛的便是Http协议,所有www都遵循这个标准。主要用于Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的,是一个基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。简单的来说,是用于获取和请求,客户端和服务端传递数据

常用请求方式

* get: 从服务器获取请求
* post:更新、修改数据
* delete: 删除数据
* put:创建数据,和insert对应

Https

      HTTPS(超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性


Session原理

Http 无状态,有会话:

  • 无状态是指,请求之间互相独立,第一次请求的数据,第二次请求不能重用

  • 有会话是指,客户端和服务端都有相应的技术,可用暂存数据,让数据在请求间共享

服务端使用了Session技术来暂存数据


Session技术实现身份验证

比较适合于单体项目
流程解析:
一、
1. 用户向服务端发送登录请求
2. LoginController验证用户名,密码是否正确
3. 验证通过后,记录下验证通过的标记
4. 存储标记到Session中
5. 登录成功
二、
1. 用户的其他请求要访问权限时,发送请求到LoginInterrceptor拦截器
2. 拦截器检测是否存在用户名
3. 存在即可访问,不存在用户名则要用户登录

点击查看代码
//JavaWeb

package com.wyw.text.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wyw.text.Dao.UserDao;
import com.wyw.text.Dao.impl.UserDaoimpl;
import com.wyw.text.domin.User;

@WebServlet("/loginservlet")
public class loginservlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public loginservlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/heml;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		UserDao userDao=new UserDaoimpl();
		User user=userDao.addfind(username, password);
		if(user==null){
			request.setAttribute("pwd", "用户名或者密码错误");
			request.getRequestDispatcher("/login.jsp").forward(request,response);
			return ;
		}else{
			request.getSession().setAttribute("user", user);
			response.sendRedirect(request.getContextPath()+"/index.jsp");
			return ;
		}
	}

}

Jwt技术实现身份验证

比较适合分布式项目

流程解析:

一、 
  1. 用户向服务端LoginController发送登录请求
  2. LoginController验证用户名,密码是否正确
  3. 验证通过后,返回token到客户端,并存储起来(例如cookie)
  4. 登录成功
二、
  1. 客户端其他页面的请求,并携带token
  2. 过滤器验证token
  3. 校验无误即可访问

过滤器代码

点击查看代码
package com.kob.backend.config.filter;

import com.kob.backend.mapper.UserMapper;
import com.kob.backend.pojo.User;
import com.kob.backend.service.impl.utils.UserDetailsImpl;
import com.kob.backend.utils.JwtUtil;
import io.jsonwebtoken.Claims;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
    @Autowired
    private UserMapper userMapper;

    @Override
    protected void doFilterInternal(HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull FilterChain filterChain) throws ServletException, IOException {
        String token = request.getHeader("Authorization");

        if (!StringUtils.hasText(token) || !token.startsWith("Bearer ")) {
            filterChain.doFilter(request, response);
            return;
        }

        token = token.substring(7);

        String userid;
        try {
            Claims claims = JwtUtil.parseJWT(token);
            userid = claims.getSubject();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        User user = userMapper.selectById(Integer.parseInt(userid));

        if (user == null) {
            throw new RuntimeException("用户名未登录");
        }

        UserDetailsImpl loginUser = new UserDetailsImpl(user);
        UsernamePasswordAuthenticationToken authenticationToken =
                new UsernamePasswordAuthenticationToken(loginUser, null, null);

        SecurityContextHolder.getContext().setAuthentication(authenticationToken);

        filterChain.doFilter(request, response);
    }
}


标签:Http,com,request,token,Session,import,servlet,response
From: https://www.cnblogs.com/wywbo/p/16950896.html

相关文章

  • Angular HttpClient 接收、发送 请求带 Cookie
    前言:angular客户端请求Webapi获取cookie,cooike设置一部分信息。才发现我以前使用angular发送http请求还从来没看到过接收、发送Cookie。其实接收、发送请求......
  • 七、Cookie、Session
    7.1、会话:会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;有状态会话:一个同学来过教师,下次再来教室,我们会知道这个同学,曾经来......
  • 理解 HTTP
    环境:Windows10家庭中文版GoogleChrome108.0.5359.94(正式版本)(64位)fiddlerv5.0.20211.51073for.NET4.6.1Built:2021年12月15日一.概述简述H......
  • springboot+spring-session
    1.实现背景  测试环境上部署了一个单机项目,项目的context-path为空,之后再经过nginx的转发进行部署,项目可以正常进行登录等等一系列操作;生产环境跟测试环境代码完全相......
  • DataCollatorForTokenClassification
    目录DataCollatorMixin类DataCollatorForTokenClassification类DataCollatorMixin类classDataCollatorMixin:def__call__(self,features,return_tensors=None)......
  • HTTP 基本概念
    一、HTTP是什么?HTTP是超文本传输协议,也就是HyperText Transfer Protocol。(一)能否详细解释「超文本传输协议」?HTTP的名字「超文本协议传输」,它可以拆成三个部分:超......
  • token失效解决办法
    importjwtfrom"jsonwebtoken";exportconstsecure='abcd123xxxxxxxxxxxx'//解密获取用户信息exportconstcheckLogin=()=>{consttoken=getToken()......
  • http-server服务
     npm安装服务npminstallhttp-server-g 启动服务访问文件的index.htmlhttp-server   参考网站https://xiaoman.blog.csdn.net/article/details/1263......
  • <8> httpx基础
    支持HTTP/2.0,异步1.安装pipinstallhttpx[http2]2.基本使用(类似requests)httpx默认使用的HTTP/1.1,需要手动声明才能使用HTTP/2.0importhttpxclient=httpx.Cli......
  • SpringCloud Alibaba(七) - JWT(JSON Web Token)
    原文链接:JWT详解:https://blog.csdn.net/weixin_45070175/article/details/1185592721、什么是JWT通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串......