当前位置: 首页 > news >正文

建筑培训网考题答案东莞优化网站关键词优化

建筑培训网考题答案,东莞优化网站关键词优化,网站大致内容,上海营销活动策划公司推荐视频#xff1a;【从零开始掌握JWT】 目录 第一章 会话跟踪 01 使用Cookie和Session#xff0c;jsessionid 02 使用token 例子一#xff1a;自定义token 例子二#xff1a;使用redis存储token 第一章 会话跟踪 应用背景 #xff1a;浏览器访问web应用#xff… 推荐视频【从零开始掌握JWT】 目录 第一章 会话跟踪 01  使用Cookie和Sessionjsessionid 02 使用token 例子一自定义token 例子二使用redis存储token 第一章 会话跟踪 应用背景 浏览器访问web应用基于HTTP协议发送报文HTTP是一种无状态协议每当用户发出请求时服务器就会做出响应客户端与服务器之间的联系是离散的、非连续的。 服务器不知道是谁发的请求。当用户在同一网站的多个页面之间转换时需要知道用户是谁时会话跟踪技术就可以解决这个问题。 会话跟踪主要使用的技术 URL重写隐藏表单域cookiesession # 1、URL重写技术 就是在URL结尾添加一个附加数据以标识该会话把会话ID通过URL的信息传递过去以便在服务端进行识别不同的用户 # 2、隐藏表单域: 将会话ID添加到HTML表单元素中提交到服务器此表单不再客户端显示 # 3、cookie Cookie是web服务器发送给客户端的一小段信息客户端请求时可以读取该信息发送到服务器端进而进行用户的识别。对于客户端的每次请求服务器都会将Cookie发送到客户端,在客户端可以进行保存以便下次使用。 # 4、session 在服务器端会创建一个session对象产生一个sessionID来标识这个session对象然后将这个sessionID放入到Cookie中发送到客户端下一次访问时sessionID会发送到服务器在服务器端进行识别不同的用户session是依赖Cookie的如果cookie被禁用那么session也将失效 session默认的会话时长为30分钟。 01  使用Cookie和Sessionjsessionid 项目背景进行一次请求转发产生一次会话。  项目场景 WebServlet 是Java Servlet规范中的注解用于标识一个Servlet类并指定该Servlet处理的URL模式等配置信息。ServletComponentScan 是Spring Boot提供的注解用于扫描并注册使用WebServlet、WebFilter和WebListener注解标记的Servlet、Filter和Listener类。 package com.demo.servlet;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 java.io.IOException; import java.net.http.HttpRequest;WebServlet(myserlet) public class MyServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//输出 sessionidSystem.out.println(sessionreq.getSession().getId());// 转发到show.jspreq.getRequestDispatcher(/show.jsp).forward(req, resp);} }html bodyh2Hello World!/h2 /body a herfmyservlet访问servlet/a /html% page contentTypetext/html;charsetUTF-8 languagejava % html headtitleTitle/title /head bodyh3show.jsp/h3 /body /html会话id  02 使用token token是什么 token是什么翻译是令牌访问系统的凭证令牌证明你是谁你能做什么。 token是服务端生成的一串字符串客户端首先请求一个令牌当第一次登录后服务器生成一个token并将此token返回给客户端以后客户端只需带上这个token前来请求数据即可无需再次带上用户名和密码。 例子一自定义token 1.创建springboot项目 2.加入依赖spring-web依赖jquery (webjar) 3.在static目录下创建htm1目录新建login.html 4.login.html登录页面获取token 5.新建Logincontroller模拟登录业务逻辑使用UUID生成一个token返回给请求 6.新建main.html作为业务逻辑处理页面定义一个查询按钮发起ajax请求参数有token 7.创建一个处理query的方法使用token验证登录用户信息。根据验证结果处理其他业务。 1加入依赖spring-web依赖jquery (webjar) dependencygroupIdorg.webjars/groupIdartifactIdjquery/artifactIdversion3.6.0/version/dependency 2在static目录下创建html目录新建login.html !DOCTYPE html html langen headmeta charsetUTF-8title登录/title!-- 从项目的 webjars 中加载了 jQuery 3.6.0 版本的库文件通过该文件可以在页面中使用 jQuery 提供的功能和方法。--script src/webjars/jquery/3.6.0/jquery.js/script!-- 从 BootCDN 加载了 jQuery Cookie 插件的压缩版本。该插件使得在客户端可以方便地操作和管理 cookie比如设置、获取和删除 cookie 等操作。--script srchttps://cdn.bootcdn.net/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js/script/head bodydiv stylemargin-left: 300px h3登录页面/h3form idloginFrm action methodpost用户名input typetext namename br/密nbsp;码input typetext namepwd br/input typebutton idloginBtn value登录/form/divscript typetext/javascript$(function () {$(#loginBtn).on(click, function (){$.ajax({url:app/login,type:post,data:$(#loginFrm).serialize(),dataType:json,success:function (resp){// 存放到cookie$.cookie(accessToken,resp.data);alert(respresp.msg, tokenresp.data);}})})})/script /body /html 3login.html登录页面获取token RequestParam(name) String name 表示从请求中获取名为 name 的参数的值并将其赋给名为 name 的 String 类型变量。RequestParam(pwd) String pwd 表示从请求中获取名为 pwd 的参数的值并将其赋给名为 pwd 的 String 类型变量。 UUID.randomUUID()UUID 类是 Java 中用于表示统一唯一标识符的类。randomUUID() 方法会生成一个新的随机 UUID 对象。 package com.example.root.controller;import com.example.root.vo.ResultObject; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap;RestController public class LoginController {MapString,String tokenMap new ConcurrentHashMap();//登录方法PostMapping(/app/login)public ResultObject login(RequestParam(name) String name, RequestParam(pwd) String pwd){ResultObject ro new ResultObject();if (lisi.equals(name) 123.equals(pwd)){// 登录成功生成tokenString token UUID.randomUUID().toString().replaceAll(-,);ro.setCode(0);ro.setMsg(登录成功返回token);ro.setData(token);//存储tokentokenMap.put(token, name);}else{ro.setCode(1000);ro.setMsg(登录失败没有token);ro.setData();}return ro;}}分别对应Code;Msg;Token;4带上token访问前端API !DOCTYPE html html langen headmeta charsetUTF-8titleTitle/title!-- 从项目的 webjars 中加载了 jQuery 3.6.0 版本的库文件通过该文件可以在页面中使用 jQuery 提供的功能和方法。--script src/webjars/jquery/3.6.0/jquery.js/script!-- 从 BootCDN 加载了 jQuery Cookie 插件的压缩版本。该插件使得在客户端可以方便地操作和管理 cookie比如设置、获取和删除 cookie 等操作。--script srchttps://cdn.bootcdn.net/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js/script/head bodydivinput typetext namestudentId idstudentId value1001br/input typebutton namequeryBtn idqueryBtn value访问api需要带上tokenbr//divscript typetext/javascript$(function(){$(#queryBtn).on(click, function (){$.ajax({url:app/query,type:post,data:{studentId:$(#studentId).val(),accessToken:$.cookie(accessToken)},dataType:json,success:function (resp){alert(respresp.msg);}})})}) /script/body /html package com.example.root.controller;import com.example.root.vo.ResultObject; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap;RestController public class LoginController {MapString,String tokenMap new ConcurrentHashMap();//登录方法PostMapping(/app/login)public ResultObject login(RequestParam(name) String name, RequestParam(pwd) String pwd){ResultObject ro new ResultObject();if (lisi.equals(name) 123.equals(pwd)){// 登录成功生成tokenString token UUID.randomUUID().toString().replaceAll(-,);ro.setCode(0);ro.setMsg(登录成功返回token);ro.setData(token);//存储tokentokenMap.put(token, name);}else{ro.setCode(1000);ro.setMsg(登录失败没有token);ro.setData();}return ro;}PostMapping(/app/query)public ResultObject query(Integer studentId, String accessToken){ResultObject ro new ResultObject();// 判断tokenif(tokenMap.containsKey(accessToken)){//执行业务逻辑查询学生ro.setCode(0);ro.setMsg(执行业务逻辑是成功的);ro.setData(学生是idstudentId);}else {ro.setCode(1);ro.setMsg(不能访问系统);ro.setData();}return ro;}}例子二使用redis存储token stringRedisTemplate这是 Spring Data Redis 提供的用于操作 Redis 数据库的模板类。opsForHash()这是 StringRedisTemplate 提供的用于操作哈希表数据结构的方法返回一个 HashOperations 对象通过这个对象可以进行哈希表的各种操作。putAll(key, map)这是 HashOperations 接口中的一个方法用于向指定哈希表 key 中批量 添加 字段和对应的值。参数 map 是一个 Java Map 对象其中包含要添加到哈希表中的字段和值。entries(key)这是 HashOperations 接口中的一个方法用于 获取 指定哈希表 key 中的所有字段和对应的值并以 Map 的形式返回结果。 1向redis存储token pom.xml dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency application.properties: # 设置redis spring.data.redis.hostlocalhost spring.data.redis.port6379 login2.html: !DOCTYPE html html langen headmeta charsetUTF-8title登录/title!-- 从项目的 webjars 中加载了 jQuery 3.6.0 版本的库文件通过该文件可以在页面中使用 jQuery 提供的功能和方法。--script src/webjars/jquery/3.6.0/jquery.js/script!-- 从 BootCDN 加载了 jQuery Cookie 插件的压缩版本。该插件使得在客户端可以方便地操作和管理 cookie比如设置、获取和删除 cookie 等操作。--script srchttps://cdn.bootcdn.net/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js/script/head bodydiv stylemargin-left: 300px h3登录页面redis/h3form idloginFrm action methodpost用户名input typetext namename br/密nbsp;码input typetext namepwd br/input typebutton idloginBtn value登录/form/divscript typetext/javascript$(function () {$(#loginBtn).on(click, function (){$.ajax({url:app/redis/login,type:post,data:$(#loginFrm).serialize(),dataType:json,success:function (resp){// 消息框alert(redis respresp.msg, tokenresp.data);// 存放到cookie$.cookie(accessRedisToken, resp.data);}})})})/script /body /html LoginController2.java: package com.example.root.controller;import com.example.root.vo.ResultObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.data.redis.core.StringRedisTemplate;import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.TimeUnit;RestController public class LoginController2 {private String TOKEN_KEY TOKEN:;Autowiredprivate StringRedisTemplate stringRedisTemplate;//获取tokenredis存储tokenPostMapping(/app/redis/login)public ResultObject loginAccessToken(RequestParam(name) String name,RequestParam(pwd) String pwd) {ResultObject ro new ResultObject();// 登录处理返回tokenif (lisi.equals(name) 123.equals(pwd)){// 登录成功生成tokenString token UUID.randomUUID().toString().replaceAll(-,).toUpperCase();// 准备数据MapString,String map new HashMap();map.put(userId,1001);map.put(name,lisi);map.put(role,admin);// 其他数据// 存储数据到redisString key TOKEN_KEY token;stringRedisTemplate.opsForHash().putAll(key, map);// 有效会话时间 20minstringRedisTemplate.expire(key, 20, TimeUnit.MINUTES);// 返回结果ro.setCode(0);ro.setMsg(登录成功);ro.setData(token);}else {ro.setCode(1);ro.setMsg(认证失败);ro.setData();}return ro;}}redis安装和配置Window下Redis的安装和部署详细图文教程Redis的安装和可视化工具的使用_redis安装-CSDN博客  注意访问localhost:8080/login2.html 2) 从redis取数据访问前端API main2.html: !DOCTYPE html html langen headmeta charsetUTF-8titleTitle/title!-- 从项目的 webjars 中加载了 jQuery 3.6.0 版本的库文件通过该文件可以在页面中使用 jQuery 提供的功能和方法。--script src/webjars/jquery/3.6.0/jquery.js/script!-- 从 BootCDN 加载了 jQuery Cookie 插件的压缩版本。该插件使得在客户端可以方便地操作和管理 cookie比如设置、获取和删除 cookie 等操作。--script srchttps://cdn.bootcdn.net/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js/script/head bodydivinput typetext namestudentId idstudentId value1001br/input typebutton namequeryBtn idqueryBtn value访问api需要带上token(redis)br//divscript typetext/javascript$(function(){$(#queryBtn).on(click, function (){$.ajax({// 指定了AJAX请求的目标 URL到 controller类url:app/redis/query,type:post,data:{studentId:$(#studentId).val(),//获取 cookieaccessToken:$.cookie(accessRedisToken)},dataType:json,// 设置请求成功后的处理函数success:function (resp){alert(respresp.msg);}})})}) /script/body /html LoginController.java: package com.example.root.controller;import com.example.root.vo.ResultObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.data.redis.core.StringRedisTemplate;import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.TimeUnit;RestController public class LoginController2 {private String TOKEN_KEY TOKEN:;Autowiredprivate StringRedisTemplate stringRedisTemplate;//获取tokenredis存储tokenPostMapping(/app/redis/login)public ResultObject loginAccessToken(RequestParam(name) String name,RequestParam(pwd) String pwd) {ResultObject ro new ResultObject();// 登录处理返回tokenif (lisi.equals(name) 123.equals(pwd)){// 登录成功生成tokenString token UUID.randomUUID().toString().replaceAll(-,).toUpperCase();// 准备数据MapString,String map new HashMap();map.put(userId,1001);map.put(name,lisi);map.put(role,admin);// 其他数据// 存储数据到redisString key TOKEN_KEY token;stringRedisTemplate.opsForHash().putAll(key, map);// 有效会话时间 20minstringRedisTemplate.expire(key, 20, TimeUnit.MINUTES);// 返回结果ro.setCode(0);ro.setMsg(登录成功);ro.setData(token);}else {ro.setCode(1);ro.setMsg(认证失败);ro.setData();}return ro;}//模拟业务处理方法PostMapping(app/redis/query)public ResultObject query(Integer studentId, String accessToken){ResultObject ro new ResultObject();// 检查tokenString key TOKEN_KEY accessToken;if(stringRedisTemplate.hasKey(key)){// 获取redis存储数据userIdrole等MapObject, Object map stringRedisTemplate.opsForHash().entries(key);String userId (String) map.get(userId);String role (String) map.get(role);String name (String) map.get(name);// 处理业务逻辑if(admin.equals(role)){ro.setCode(0);ro.setMsg(可以执行admin的操作);ro.setData(执行查询学生是studentId姓名是name);}}return ro;}}第二章 会用JWT TOKEN的特点 1. 无状态可扩展。无需session可以把token数据从一个服务传递到其他服务从网关发送到其他服务也很容易。 2. 安全性token是可以进行加密处理不存储敏感数据而且token有实效的有过期的过期后需要重写验证。 3. 可扩展token能实现不同应用之间的通信。 比如使用token访问第三方应用。 4. 跨平台现代化的应用可能接入不同的设备和其他应用。使用一个有效 token可以在手机appweb应用等访问应用。 JWT规范允许我们使用JWT在两个组织之间传递安全可靠的信息。  JWT是一个凭证。 JWT的工作原理 用户先到服务器认证身份认证后服务器返回一个json就像这个样子。 以后用户再发起请求就是带着这个ison数据服务器拿这个ison对象确定用户身份判断用户能执行操作获取数据。为了防止用户篡改数据服务器在生成这个json对象的时候会加上签名。 服务器就不保存任何 session 数据了也无需使用redis存储服务器变成无状态了从而比较容易实现扩展。 什么时候使用JWT 1授权Authorization:这是使用WT的最常见方案。用户登录后每个后续请求都将包含JWT从而允许用户访问该令牌允许的路由服务和资源。单点登录是当今广泛使用IWT的一项功能因为它的开销很小并且可以在不同的域中轻松使用。 2信息交换(Information Exchange)JSON Web令牌是在各方之间安全地传输信息的一种好方法。因为可以对]WT进行签名例如使用公钥/私钥对所以您可以确保发件人是他们所说的人。此外由于签名是使用标头和有效负载计算的因此您还可以验证内容是否未被算改。 3客户端会话(无Session)。 HttpServlet 是Java Servlet API 的一个抽象类用于处理来自客户端的HTTP请求并生成HTTP响应。开发人员可以通过继承HttpServlet类并重写其中的doGet()、doPost()等方法来处理特定的HTTP请求。 doGet(HttpServletRequest request, HttpServletResponse response): 处理HTTP GET请求的方法。开发人员可以重写这个方法来处理GET请求并生成相应的响应。doPost(HttpServletRequest request, HttpServletResponse response): 处理HTTP POST请求的方法。开发人员可以重写这个方法来处理POST请求并生成相应的响应。doPut(HttpServletRequest request, HttpServletResponse response): 处理HTTP PUT请求的方法。doDelete(HttpServletRequest request, HttpServletResponse response): 处理HTTP DELETE请求的方法。 HttpServletRequest常用方法 getParameter(String name): 获取HTTP请求中的参数值。getMethod(): 获取HTTP请求的方法如GET、POST等。getRequestURL(): 获取请求的URL。getSession(): 获取与该请求关联的会话如果没有会话存在则创建一个新的会话。getHeader(String name): 获取指定名称的请求头的值。getCookies(): 获取包含该请求的所有Cookie的数组。 HttpServletResponse常用方法 setContentType(String type): 设置响应的内容类型。setStatus(int sc): 设置响应的状态码如200、404等。getWriter(): 返回一个PrintWriter对象用于向客户端发送文本数据。sendRedirect(String location): 发送一个重定向响应到指定的URL。addHeader(String name, String value): 添加一个响应头。setCookie(Cookie cookie): 将Cookie添加到响应中。
http://www.pierceye.com/news/968888/

相关文章:

  • 建一个展示网站下班多少钱怎样给一个公司做网站改版
  • wordpress 网站死机php7.0 wordpress 设置
  • 免版权费自建网站自考本科官网
  • 使用ai做网站设计长沙建设网站哪家好
  • 建设行业网站价格公共服务标准化建设
  • 电商网站开发发展和前景网站建设案例多少钱
  • 网站建设特效代码做销售用什么网站
  • 如何做中英版网站上海到北京机票
  • 海淀网站建设枣庄微信官网小程序注册
  • 投诉网站制作事件营销的概念
  • 做网站一个程序员够吗企业互联网推广
  • 安徽省建设工程资料上传网站网站内容优化
  • 直接用apk 做登陆网站呢图网站场建设封面
  • 书店网站的建设网络服务器搭建
  • led灯网站模板电商网站开发人员人数
  • 南阳网站建设报价沧州南皮网站建设
  • 网站左侧分类导航菜单用PS做的个人网站图片
  • 返利网 网站开发青岛开发区建网站哪家好
  • 还能电子商务网站建设短网址生成站长工具
  • 有专门做网站的吗网站后台发表文章
  • 秦皇岛汽车网站制作广州网站建设 知名
  • 自己建网站数据怎么做惠州网站制作培训
  • 南山做网站的wordpress自助友链
  • php企业网站源码软件工程师发展前景
  • 如何从建设局网站上更换职称人员哪个网站可以免费做国外网站
  • 情侣博客网站模板下载学校网站建设调查报告
  • 平台网站开发是什么意思全屏的网站
  • 素材图库网站源码网站建设及推广培训班
  • 英国电商网站jsp旅游网站开发系统
  • 机关网站建设引导语开发一个企业网站需要多少钱