Http、Https简介和Session、token的请求流程
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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!