首页IT科技Http、Https简介和Session、token的请求流程

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

时间2025-05-05 12:40:28分类IT科技浏览3530
导读:Http Http (超文本输出协议 是一种分布式、协作式和超媒体信息系统的应用层协议,它通常运行在TCP之上,因特网应用最广泛的便是Http协议,所有www都遵循这个标准。主要用于Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的,是一个基于 TCP/IP 通信协议来传递数据的(HTML...

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); } }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
win7旗舰版怎样重装系统(windows7旗舰版系统怎么重装?极易一键系统重装教程) 怎么把系统转移到固态硬盘教程(操作系统怎么转移至新硬盘? 系统转移操作方法)