JAVA Web 学习(五)Nginx、RPC、JWT

news2024/11/21 0:15:46

十二、反向代理服务器——Nginx

支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。

img

使用场景
  1. 静态资源服务,通过本地文件系统提供服务;
  2. 反向代理服务,延伸出包括缓存、负载均衡等;
  3. API 服务, OpenResty。
## 正向和反向代理区别
正向代理需要你主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去获取访问内容并返回;
反向代理不需要你做任何设置,直接访问服务器真实ip或者域名,但是服务器内部会自动根据访问内容进行跳转及内容返回,你不知道它最终访问的是哪些机器。
## 使用场景
正向:VPN
反向:保护和隐藏原始资源服务器、加密和SSL加速、负载均衡、缓存静态内容、压缩、减速上传、安全、外网发布

十三、远程过程调用——RPC

  • 客户端(Client):服务调用方(服务消费者)
  • 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端
  • 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
  • 服务端(Server):服务的真正提供者

RPC框架的实现原理,及RPC架构组件详解

RPC框架的实现原理,及RPC架构组件详解

十四、JWT——轻量级的身份验证和授权机制

组成
  • Header(标头),通常由两部分组成:令牌的类型 和 所用的加密算法,然后将该JSON对象数据进行Base64 URL编码,得到的字符串就是JWT令牌的第一部分。
  • Payload(载荷),有效数据存储区,主要定义自定义字段和内置字段数据。通常会把用户信息和令牌过期时间放在这里,同样也是一个JSON对象,里面的key和value可随意设置,然后经过Base64 URL编码后得到JWT令牌的第二部分
  • Signature(签名), 使用头部Header定义的加密算法,对前两部分Base64编码拼接的结果进行加密,加密时的秘钥服务私密保存,加密后的结果在通过Base64Url编码得到JWT令牌的第三部分。
  • JWT令牌由Header、Payload、Signature三部分组成,每部分字符串中间用. 拼接。JWT令牌的最终格式是这样的: 第一部分.第二部分.第三部分

img

流程
  1. 应用在用户认证后不需要把用户信息保存在内存中,而是将用户信息编码成JWT TOKEN,返回
  2. 前端可以把token保存在localStorage或sessionStorage中,退出登录时删除Token
  3. 每次请求时,前端应把Token放在HTTP请求Header的Authorization字段中,并且后端验证Token的有效性和正确性
  4. 如果Token被验证通过,后端可以根据Token中的用户信息进行其他权限或业务操作,并返回相应的结果

img

代码
package com.example.mydreams.jwt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.HashMap;

public class JwtDemo {
    public static void main(String[] args) {
        String token = generateJwtToken();
        System.out.println("生成的JWT的Token为:");
        System.out.println(token);
        //创建验证对象
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("Periqi")).build();
        DecodedJWT verify = jwtVerifier.verify(token);
        System.out.println("验证传入的用户信息为:userId:"+verify.getClaim("userId")+",username:"+verify.getClaim("username")+",过期时间:"+verify.getExpiresAt());
    }

    //生成JWTtoken
    public static String generateJwtToken() {
        HashMap<String,Object> map = new HashMap();
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.SECOND,1000);
        String token = JWT.create()
                .withHeader(map)    //Header(可以不用设置,因为Header有默认值:{"alg":"HS256", "typ":"JWT" })
                .withClaim("userId",100)  //payload
                .withClaim("username","码农佩奇") //payload
                .withExpiresAt(instance.getTime())  //指定令牌过期时间
                .sign(Algorithm.HMAC256("Periqi"));  //Signature
        return token;
    }
}

程序运行结果:
生成的JWTToken:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0NDI0OTYsInVzZXJJZCI6MTAwLCJ1c2VybmFtZSI6IueggeWGnOS9qeWlhyJ9.qAik5UQsDV_mjr10C3cyCqpLBvhI_IXZDRczQQy2mCk
验证传入的用户信息为:userId:100,username:"码农佩奇",过期时间:Fri Dec 01 22:54:56 CST 2023
验证

img

服务器收到token后,取出前2部分使用私钥签名得到结果,与token第三部分比较,看是否相同

  • SignatureVerificationException 签名不一致异常
  • TokenExpiredException 令牌过期异常
  • AlgorithmMismatchException 算法不匹配异常
  • InvalidClaimException 失效的payload异常

缺点:不支持注销、Token过期机制存在缺陷、Token数量过多可能导致性能问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1442345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识Solidworks:我的第一份作业的感想

从来没用CAD软件画过机械设计图。但我脑子里有一种概念&#xff0c;无非就是把尺规作图软件化&#xff0c;更方便画图、更方便修改、更方便打印一些。但第一份 Solidworks 作业就颠覆了我的认知&#xff0c;考虑到这个软件的上市时间&#xff0c;让我意识到自己对 CAD 软件的认…

【大厂AI课学习笔记】【1.5 AI技术领域】(8)文本分类

8,9,10&#xff0c;将分别讨论自然语言处理领域的3个重要场景。 自然语言处理&#xff0c;Natual Language Processing&#xff0c;NLP&#xff0c;包括自然语言识别和自然语言生成。 用途是从非结构化的文本数据中&#xff0c;发掘洞见&#xff0c;并访问这些信息&#xff0…

C++——二叉树

引入 map和set特性需要先铺垫二叉搜索树&#xff0c;而二叉搜索树也是一种树形结构 二叉搜索树的特性了解&#xff0c;有助于更好的理解map和set的特性 1.二叉搜索树的概念及优缺点 1.1二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或…

CSP-202109-1-数组推导

CSP-202109-1-数组推导 解题思路 如果 currentValue 与 previousValue 相同&#xff0c;说明这个值不是一个独特的新值&#xff0c;因此只将它加到 sumTotal 上。如果 currentValue 与 previousValue 不相同&#xff0c;说明这是一个新的独特值&#xff0c;因此既将它加到 su…

逐行拆解Guava限流器RateLimiter

逐行拆解Guava限流器RateLimiter 常见限流算法 计数器法 设置一个时间窗口内允许的最大请求量&#xff0c;如果当前窗口请求数超过这个设定数量&#xff0c;则拒绝该窗口内之后的请求。 关键词&#xff1a;时间窗口&#xff0c;计数器。 举个例子&#xff0c;我们设置1秒钟…

面试经典150题 -- 栈(总结)

总的链接 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 关于栈 -- stack 的学习链接 c的STL中的栈 -- stack-CSDN博客 20 . 有效的括号 这题直接用栈模拟就好了; 这里用一种取巧的方法 , 当遇见左括号&#xff0c;加入右…

【Langchain+Streamlit】旅游聊天机器人

【LangchainStreamlit】打造一个旅游问答AI-CSDN博客 项目线上地址&#xff0c;无需openai秘钥可直接体验&#xff1a;http://101.33.225.241:8502/ github地址&#xff1a;GitHub - jerry1900/langchain_chatbot: langchainstreamlit打造的一个有memory的旅游聊天机器人&…

Linux 命令基础

Shell概述 Linux操作系统的Shell作为操作系统的外壳&#xff0c;为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell是用户和Linux内核之间的接口程序&#xff0c;如果把硬件想象成一个球体的中心&#xff0c;内核围绕在硬件的外层管理着…

【JS逆向九】逆向某混淆网站源码,模拟 加密,解密,密钥生成

逆向日期&#xff1a;2024.02.09 使用工具&#xff1a;Node.js 是否有混淆&#xff1a;源代码混淆 加密方法&#xff1a;AES标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff0…

读千脑智能笔记09_大脑的错误信念

1. 人类智能的未来 1.1. 气候变化如此剧烈&#xff0c;在下一个百年里&#xff0c;一些城市很可能会不再适合人类居住&#xff0c;大面积的农业区或将变得更加贫瘠 1.1.1. 气候并非唯一需要关注的问题 1.1.2. 人类的一些技术&#xff0c;如核武器和基因编辑&#xff0c;为少…

win32编程系统BUG(Win32 API中的WM_SETTEXT消息)

由于频繁使用Win32 API中的WM_SETTEXT消息&#xff0c;导致内存占用直线上升。 暂未找到有效解决方案。

【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、分布…

全网最快2024刘谦春晚魔术揭秘

早点关注我&#xff0c;精彩不错过&#xff01; 来来来&#xff0c;我的手机快被私信爆炸了&#xff0c;一次性给大家说清楚。 原版 Woody Arogon的教学《Woodyland》 数学原理 约瑟夫问题与魔术&#xff08;五&#xff09;——魔术《自我匹配的奇迹》中的数学原理 魔术原理 约…

vim常用命令以及配置文件

layout: article title: “vim文本编译器” vim文本编辑器 有三种模式: 命令模式 文本模式, 末行模式 vim命令大全 - 知乎 (zhihu.com) 命令模式 插入 i: 切换到输入模式&#xff0c;在光标当前位置开始输入文本。 a: 进入插入模式&#xff0c;在光标下一个位置开始输入文…

小巨人大爆发:紧凑型大型语言模型效率之谜揭晓!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【数学建模】【2024年】【第40届】【MCM/ICM】【A题 七鳃鳗性别比与资源可用性】【解题思路】

我们通过将近半天的搜索数据&#xff0c;查到了美国五大湖中优势物种的食物网数据&#xff0c;以Eric伊利湖为例&#xff0c;共包含34各优势物种&#xff0c;相互之间的关系如下图所示&#xff1a; 一、题目 &#xff08;一&#xff09; 赛题原文 2024 MCM Problem A: Reso…

VBA技术资料MF117:测试显示器大小

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

数据结构(C语言)代码实现(八)——顺序栈实现数值转换行编辑程序括号分配汉诺塔

目录 参考资料 顺序栈的实现 头文件SqStack.h&#xff08;顺序栈函数声明&#xff09; 源文件SqStack.cpp&#xff08;顺序栈函数实现&#xff09; 顺序栈的三个应用 数值转换 行编辑程序 顺序栈的实现测试 栈与递归的实现&#xff08;以汉诺塔为例&#xff09; 参考资…

前端工程化面试题 | 02.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

秒杀相关问题解决

秒杀 超卖问题 如下,我们先来复现问题,抢购秒杀券的代码逻辑也是很简单, 先判断优惠券是否开始了,是的化,判断库存是否充足,如果是的化,扣减库存,最后创建订单 如下是代码 Override Transactional public Result seckillVoucher(Long voucherId) {//1.查询优惠券SeckillVo…