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、Https简介和Session、token的请求流程的更多相关文章

  1. HTTP认证方式与https简介

    HTTP认证与https简介 HTTP请求报头: Authorization [ˌɔ:θəraɪˈzeɪʃn] HTTP响应报头: WWW-Authenticate [ɔ:ˈθentɪkeɪt] HT ...

  2. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

  3. cookie session token

    HTTP    HTTP是无状态(stateless)的网络协议.HTTP协议自身不对请求和响应之间的通信状态进行保存.也就是说HTTP协议对于发送过的请求或响应都不做持久化处理. 为了实现保持状态功 ...

  4. cookie, session, token 是什么 以及相应的安全考量

    Cookie cookie 最常见的是用来保存一些账号信息,比如下图里的 记住账号 就是记录到了cookie里面 cookie 更主要的是针对和server通信的,我们知道http 是无状态的,那如果 ...

  5. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  6. cookie,session,token的定义及区别

    参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...

  7. Session, Token and SSO 有什么区别

    Session, Token and SSO 有什么区别 Basic Compareation Session-based Authentication In Session-based Authen ...

  8. (转载)session token机制

    http://blog.chinaunix.net/uid-26642709-id-3061264.html 使用session token时,必须用struts2表标签库,不能用html 通过ses ...

  9. cookie session token详解

    cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...

  10. django基础之day10,cookie session token

    https://www.cnblogs.com/Dominic-Ji/p/10886902.html cookie session token

随机推荐

  1. 小米红米手机应用APP字体太小

    小米红米手机应用APP字体太小 调整了手机显示大小,只能解决一点点,还是有点小,比如B站.微博. 调整了系统字体大小,B站.微博又不受系统字体大小控制. 只能通过修改最小宽度来解决. 1.打开开发者选 ...

  2. edge ctrl+c 复制不起作用

    现象: 在edge中选中文字时,按一次ctrl+c,到其它程序ctrl+v,并不是你选中的内容. 需要在edge中按2次ctrl+c才行. --- 当你选中文字时,会出现一个三个点的菜单,点击后会出现 ...

  3. golang 泛型的格式写法

    Go语言中的泛型(Generics)是在 Go 1.18 版本中引入的一个重要特性,它允许你编写可重用的代码,而不需要为每种数据类型重复编写相同的逻辑. 泛型通过参数化类型(type paramete ...

  4. 2个线程交替输出A1B2C3......Z26

    引言 经典多线程编程面试题 使用两个线程交替输出A1B2C3......Z26 实现方案1 public static void method2() throws InterruptedExcepti ...

  5. jwt 加密和解密demo

    jwt 加密和解密demo JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息.导入jar <dependency&g ...

  6. JSR303数据校验使用方法记录

    JSR303并不对应着指定的jar包,而是一种规范,目前hibernate-validator是使用最多的是基于JSR303规范的实现 本文不适合新人观看,要求至少要知道使用方法 Springboot ...

  7. 轻松实现H5页面下拉刷新:滑动触发、高度提示与数据刷新全攻略

    前段时间在做小程序到H5的迁移,其中小程序中下拉刷新的功能引起了产品的注意.他说到,哎,我们迁移后的H5页面怎么没有下拉刷新,于是乎,我就急忙将这部分的内容给填上. 本来是计划使用成熟的组件库来实现, ...

  8. 支持TraceID、错误文件、错误行的第三方golang库:gerror

    Gerr库简介 Golang第三方库 官方仓库:https://github.com/GuoFlight/gerror 特点: 兼容golang原生error库 gerror会自动生成traceID, ...

  9. ansible(1)---师傅领进门

    背景 在企业里,运维需要配合开发进行产品上架,说白了就是把写好的代码上服务器.那么,就会出现这样的问题:需要运维人员配置好系统,配置好环境,配置好网络,配置好程序,配置好所有所有的依赖环境.     ...

  10. 【Zabbix】Zabbix5.0安装部署问题汇总

    报错信息:No package 'oniguruma' found 解决方法:https://www.limstash.com/articles/202003/1563 报错信息: PHP bcmat ...