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

后台管理系统的通用权限解决方案(八)认证机制介绍、JWT介绍与jjwt框架的使用

文章目录

  • 1 认证机制介绍
    • 1.1 HTTP Basic Auth
    • 1.2 Cookie-Session Auth
    • 1.3 OAuth
    • 1.4 Token Auth
  • 2 JWT
    • 2.1 JWT介绍
    • 2.2 JWT的数据结构
      • 2.2.1 JWT头
      • 2.2.2 JWT有效载荷
      • 2.2.3 JWT签名
  • 3 jjwt
    • 3.1 jjwt介绍
    • 3.2 jjwt案例

1 认证机制介绍

1.1 HTTP Basic Auth

HTTP Basic Auth 是一种简单的登录认证方式,Web浏览器或其他客户端程序在请求时,通过HTTP请求头提供用户名和密码。简单点说就是每次请求时都提供用户的用户名和密码。

这种方式是先把 用户名:密码 拼接起来,并将得出的结果字符串用Base64算法编码。

例如,提供的用户名是 bill ,密码是 123456 ,则拼接后的结果就是 bill:123456 ,然后再将其用Base64编码,得到 YmlsbDoxMjM0NTY= 。最终将Base64编码的字符串通过HTTP请求头发送出去,由服务器解码得到一个由冒号分隔的用户名和密码的字符串。

优点: 基本上所有流行的网页浏览器都支持基本认证。

缺点: 由于用户名和密码都是Base64编码的,而Base64编码是可逆的,所以用户名和密码可以认为是明文。所以只有在客户端和服务器主机之间的连接是安全可信的前提下才可以使用。

1.2 Cookie-Session Auth

Cookie-Session 认证机制是通过浏览器保存的Cookie对象与服务器端的Session对象匹配来实现状态管理。

第一次请求认证时,在服务器端创建一个Session对象,同时在用户的浏览器端创建了一个Cookie对象;当我们关闭浏览器的时候,Cookie会被删除。但可以通过修改Cookie的过期事件使Cookie在一定时间内有效。

优点: 相对HTTP Basic Auth更加安全。

缺点: 随着不同客户端用户的增加,独立的服务器已无法承载更多的用户。

1.3 OAuth

OAuth 是一个关于授权(authorization)的开放网络标准。它允许用户提供一个令牌,而不是用户名和密码来访问服务器。

严格来说,OAuth不是一个标准协议,而是一个安全的授权框架。它详细描述了系统中不同角色、用户、服务前端应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。

OAuth 工作流程如下图:

优点: 快速开发,代码量小,维护工作少。

缺点: OAuth有海量的资料需要学习,要完全理解需要花费大量时间。OAuth不是一个严格的标准协议,因此在实施过程中更容易出错。

1.4 Token Auth

基于 Token 的认证鉴权机制类似于 HTTP 协议,也是无状态的。这种方式不需要在服务端保留用户的认证信息或者会话信息。这就意味着基于 Token 的认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

这个 Token 必须要在每次请求时传递给服务端,它应该保存在请求头中,Token Auth 流程如下图:

优点:

  • 支持跨域访问
  • Token 机制在服务端不需要存储Session信息:Token 自身包含了所有登录用户的信息,只需要在客户端的Cookie或本地介质存储状态信息
  • 去耦:不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可
  • 更适用于移动应用:Cookie是不被客户端(iOS, Android,Windows 8等)支持的。
  • 基于标准化:API可以采用标准化的 JSON Web Token (JWT)。这个标准已经存在多个后端库(.NET, Ruby, Java, Python, PHP)和多家公司的支持(如:Firebase, Google, Microsoft)

缺点:

  • 占带宽:正常情况下要比 session_id 更大,需要消耗更多流量,挤占更多带宽,假如你的网站每月有 10 万次的浏览量,就意味着要多开销几十兆的流量。听起来并不多,但日积月累也是不小一笔开销。实际上,许多人会在 JWT 中存储的信息会更多
  • 无法在服务端注销,因为服务端是无状态的,并没有保存客户端用户登录信息
  • 对于有着严格性能要求的 Web 应用并不理想,尤其对于单线程环境

2 JWT

2.1 JWT介绍

JWT全称为JSON Web Token,是目前最流行的跨域身份验证解决方案。 JWT是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准。

JWT特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可被加密。

2.2 JWT的数据结构

JWT其实就是一个很长的字符串,字符之间通过"."分隔符分为三个子串,各子串之间没有换行符。每一个子串表示了一个功能块,总共有三个部分:JWT头(header)有效载荷(payload)签名(signature),如下图所示:

2.2.1 JWT头

JWT头是一个描述JWT元数据的JSON对象,通常如下所示:

{"alg": "HS256", "typ": "JWT"}
  • alg:表示签名使用的算法,默认为HMAC SHA256(写为HS256)
  • typ:表示令牌的类型,JWT令牌统一写为JWT

最后,使用Base64 URL算法将上述JSON对象转换为字符串。

JWT签名算法中,一般有两个选择:HS256和RS256。

HS256 (带有 SHA-256 的 HMAC )是一种对称加密算法,双方之间仅共享一个密钥。由于使用相同的密钥生成签名和验证签名, 因此必须注意确保密钥不被泄密。

RS256 (采用SHA-256 的 RSA 签名) 是一种非对称加密算法, 它使用公钥/私钥对。JWT的提供方采用私钥生成签名, JWT的使用方获取公钥以验证签名。

2.2.2 JWT有效载荷

有效载荷,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。

有效载荷部分规定有如下七个默认字段供选择:

iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT

除以上默认字段外,还可以自定义私有字段。

最后,同样使用Base64 URL算法将有效载荷部分JSON对象转换为字符串。

2.2.3 JWT签名

签名实际上是一个加密的过程,是对上面两部分数据通过指定的算法生成哈希,以确保数据不会被篡改。

首先需要指定一个密钥(secret),该密钥仅仅保存在服务器中,并且不能向用户公开。然后使用JWT头中指定的签名算法(默认情况下为HMAC SHA256),根据以下公式生成签名哈希:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret)

在计算出签名哈希后,JWT头、有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用"."分隔,就构成整个JWT对象。

3 jjwt

3.1 jjwt介绍

jjwt 是一个提供JWT创建和验证功能的Java库。永远免费和开源(Apache License,版本2.0),很容易使用和理解。

3.2 jjwt案例

  • 1)创建maven工程jjwt-demo,并配置其pom.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hsgx</groupId><artifactId>jjwt-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.0</version></dependency></dependencies>
</project>
  • 2)编写单元测试,测试jjwt的特性
package com.hsgx.test;import cn.hutool.core.io.FileUtil;
import io.jsonwebtoken.Header;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.Test;import java.io.DataInputStream;
import java.io.InputStream;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;public class JwtTest {//生成jwt,不使用签名@Testpublic void test1(){//添加构成JWT的参数Map<String, Object> headMap = new HashMap();headMap.put("alg", "none");//不使用签名算法headMap.put("typ", "JWT");Map<String, Object> body = new HashMap();body.put("userId","1");body.put("username","xiaoming");body.put("role","admin");String jwt = Jwts.builder().setHeader(headMap).setClaims(body).setId("jwt001").compact();System.out.println(jwt);//解析jwtJwt result = Jwts.parser().parse(jwt);Object jwtBody = result.getBody();Header header = result.getHeader();System.out.println(result);System.out.println(jwtBody);System.out.println(header);}//生成jwt时使用签名算法生成签名部分----基于HS256签名算法@Testpublic void test2(){//添加构成JWT的参数Map<String, Object> headMap = new HashMap();headMap.put("alg", SignatureAlgorithm.HS256.getValue());//使用HS256签名算法headMap.put("typ", "JWT");Map<String, Object> body = new HashMap();body.put("userId","1");body.put("username","xiaoming");body.put("role","admin");String jwt = Jwts.builder().setHeader(headMap).setClaims(body).setId("jwt001").signWith(SignatureAlgorithm.HS256,"hsgx").compact();System.out.println(jwt);//解析jwtJwt result = Jwts.parser().setSigningKey("hsgx").parse(jwt);Object jwtBody = result.getBody();Header header = result.getHeader();System.out.println(result);System.out.println(jwtBody);System.out.println(header);}//生成jwt时使用签名算法生成签名部分----基于RS256签名算法@Testpublic void test3() throws Exception{//添加构成JWT的参数Map<String, Object> headMap = new HashMap();headMap.put("alg", SignatureAlgorithm.RS256.getValue());//使用RS256签名算法headMap.put("typ", "JWT");Map body = new HashMap();body.put("userId","1");body.put("username","xiaoming");body.put("role","admin");String jwt = Jwts.builder().setHeader(headMap).setClaims(body).setId("jwt001").signWith(SignatureAlgorithm.RS256, getPriKey()).compact();System.out.println(jwt);//解析jwtJwt result = Jwts.parser().setSigningKey(getPubKey()).parse(jwt);Object jwtBody = result.getBody();Header header = result.getHeader();System.out.println(result);System.out.println(jwtBody);System.out.println(header);}//获取私钥public PrivateKey getPriKey() throws Exception{InputStream resourceAsStream =this.getClass().getClassLoader().getResourceAsStream("pri.key");DataInputStream dis = new DataInputStream(resourceAsStream);byte[] keyBytes = new byte[resourceAsStream.available()];dis.readFully(keyBytes);PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory kf = KeyFactory.getInstance("RSA");return kf.generatePrivate(spec);}//获取公钥public PublicKey getPubKey() throws Exception{InputStream resourceAsStream =this.getClass().getClassLoader().getResourceAsStream("pub.key");DataInputStream dis = new DataInputStream(resourceAsStream);byte[] keyBytes = new byte[resourceAsStream.available()];dis.readFully(keyBytes);X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);KeyFactory kf = KeyFactory.getInstance("RSA");return kf.generatePublic(spec);}//生成自己的 秘钥/公钥 对@Testpublic void test4() throws Exception{//自定义 随机密码,  请修改这里String password = "itcast";KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");SecureRandom secureRandom = new SecureRandom(password.getBytes());keyPairGenerator.initialize(1024, secureRandom);KeyPair keyPair = keyPairGenerator.genKeyPair();byte[] publicKeyBytes = keyPair.getPublic().getEncoded();byte[] privateKeyBytes = keyPair.getPrivate().getEncoded();FileUtil.writeBytes(publicKeyBytes, "d:\\pub.key");FileUtil.writeBytes(privateKeyBytes, "d:\\pri.key");}
}

本节完,更多内容查阅:后台管理系统的通用权限解决方案

延伸阅读:后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)

相关文章:

后台管理系统的通用权限解决方案(八)认证机制介绍、JWT介绍与jjwt框架的使用

文章目录 1 认证机制介绍1.1 HTTP Basic Auth1.2 Cookie-Session Auth1.3 OAuth1.4 Token Auth 2 JWT2.1 JWT介绍2.2 JWT的数据结构2.2.1 JWT头2.2.2 JWT有效载荷2.2.3 JWT签名 3 jjwt3.1 jjwt介绍3.2 jjwt案例 1 认证机制介绍 1.1 HTTP Basic Auth HTTP Basic Auth 是一种简…...

接口测试 —— Postman 变量了解一下!

Postman变量是在Postman工具中使用的一种特殊功能&#xff0c;用于存储和管理动态数据。它们可以用于在请求的不同部分、环境或集合之间共享和重复使用值。 Postman变量有以下几种类型&#xff1a; 1、环境变量&#xff08;Environment Variables&#xff09;: 环境变量是在…...

鸿蒙系统:核心特性、发展历程与面临的机遇与挑战

好动与不满足是进步的第一必需品 文章目录 前言重要特点和组成部分核心特性主要组件发展历程 机遇挑战总结 前言 鸿蒙系统&#xff08;HarmonyOS&#xff09;是由华为技术有限公司开发的一款面向全场景的分布式操作系统。它旨在为用户提供更加流畅、安全且高效的数字生活体验&…...

从0到1,用Rust轻松制作电子书

我之前简单提到过用 Rust 做电子书&#xff0c;今天分享下如何用Rust做电子书。制作电子书其实用途广泛&#xff0c;不仅可以用于技术文档&#xff08;对技术人来说非常方便&#xff09;&#xff0c;也可以制作用户手册、笔记、教程等&#xff0c;还可以应用于文学创作。 如果…...

半天入门!锂电池剩余寿命预测(Python)

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD变体分解效果最好算法——CEEMDAN&#xff08;五&#xff09;-CSDN博客 拒绝信息泄露&#xff01;VMD滚动分…...

学生党头戴式耳机哪款音质更胜一筹?TOP4好音质头戴式耳机推荐

在挑选头戴式耳机时&#xff0c;市场上琳琅满目的品牌和型号常常让人目不暇接。究竟哪个学生党头戴式耳机哪款音质更胜一筹&#xff1f;这已成为许多人面临的难题。由于每个人对耳机的偏好各有侧重——一些人追求音质的纯净&#xff0c;一些人重视佩戴的舒适性&#xff0c;而另…...

数据结构 ——— 二叉树的概念及结构

目录 二叉树的概念 特殊的二叉树 一、满二叉树 二、完全二叉树 二叉树的概念 二叉树树示意图&#xff1a; 从以上二叉树示意图可以看出&#xff1a; 二叉树每个节点的度不大于 2 &#xff0c;那么整个二叉树的度也不大于 2 &#xff0c;但是也不是每个节点都必须有 2 个…...

【React】React 的核心设计思想

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 React 的核心设计思想引言声明式编程声明式 vs 命令式示例 组件化组件的优势组件…...

C++ 二叉树进阶:相关习题解析

目录 1. 二叉树创建字符串。 2. 二叉树的分层遍历1 3. 二叉树的分层遍历2 4. 二叉树的最近公共祖先 5. 将二叉搜索树转换为排序的双向链表 6. 从前序与中序遍历序列构造二叉树 7. 从中序与后序遍历序列构造二叉树 8. 二叉树的前序遍历&#xff0c;非递归迭代实现 9.…...

Matlab实现蚁群算法求解旅行商优化问题(TSP)(理论+例子+程序)

一、蚁群算法 蚁群算法由意大利学者Dorigo M等根据自然界蚂蚁觅食行为提岀。蚂蚁觅食行为表示大量蚂蚁组成的群体构成一个信息正反馈机制&#xff0c;在同一时间内路径越短蚂蚁分泌的信息就越多&#xff0c;蚂蚁选择该路径的概率就更大。 蚁群算法的思想来源于自然界蚂蚁觅食&a…...

2024年10月HarmonyOS应用开发者基础认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同 这是基础认证题库&#xff0c;不是高级认证题库注意看清楚标题 高级认证题库地址&#xff1a;20…...

kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的顺序消费?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的…...

数据分析案例-苹果品质数据可视化分析+建模预测

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

沈阳乐晟睿浩科技有限公司抖音小店运营创新

在当今这个数字化迅猛发展的时代&#xff0c;电子商务已经成为推动经济增长的重要引擎。而在电商的广阔舞台上&#xff0c;短视频与直播带货的崛起无疑是最为耀眼的明星之一。作为这一领域的佼佼者&#xff0c;抖音小店凭借其庞大的用户基础和独特的算法优势&#xff0c;吸引了…...

【前端】CSS知识梳理

基础&#xff1a;标签选择器、类选择器、id选择器和通配符选择器 font:font-style(normal) font-weight(400) font-size(16px) /line-height(0) font-family(宋体&#xff09; 复合&#xff1a; 后代选择器&#xff08; &#xff09;、子选择器&#xff08;>)、并集选择器(…...

【undefined reference to xxx】zookeeper库编译和安装 / sylar项目ubuntu20系统编译

最近学习sylar项目&#xff0c;编译项目时遇到链接库不匹配的问题&#xff0c;记录下自己解决问题过程&#xff0c;虽然过程很艰难&#xff0c;但还是解决了&#xff0c;以下内容供大家参考&#xff01; undefined reference to 问题分析 项目编译报错 /usr/bin/ld: ../lib/lib…...

IDEA解决 properties 文件乱码问题

博主介绍&#xff1a; 计算机科班人&#xff0c;全栈工程师&#xff0c;掌握C、C#、Java、Python、Android等主流编程语言&#xff0c;同时也熟练掌握mysql、oracle、sqlserver等主流数据库&#xff0c;具有丰富的项目经验和开发技能。提供相关的学习资料、程序开发、技术解答、…...

超越Jira?2024年探索项目管理新工具!

一、Jira 在项目管理中的地位 Jira 作为一款在项目管理领域久负盛名的工具&#xff0c;有着不可忽视的地位。它以强大的问题跟踪和管理功能著称&#xff0c;无论是软件缺陷、新功能需求、任务分配还是技术难题的解决&#xff0c;都能精准把控。其高可定制性更是满足了不同团队…...

大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】

大模型&#xff0c;多模态大模型面试问题【计算图&#xff0c;LLama&#xff0c;交叉熵&#xff0c;SiLU&#xff0c;RLHF】 问题一&#xff1a;讲一讲计算图中pytorch是什么&#xff0c;TensorFlow是什么&#xff1f;1. PyTorch2. TensorFlow区别总结 问题二&#xff1a;Llama…...

凌雄科技打造DaaS模式,IT设备产业链由内而外嬗变升级

恒指正处在一种“奇妙”的波动当中。低估反弹&#xff0c;瞬时拉高&#xff0c;极速回调。这些变化集中在一条曲线上&#xff0c;让市场无所适从。 但事实上&#xff0c;所有的趋势一定总是以长期为锚。这个长期的尺度&#xff0c;可能会超过一般人的预估。因为中间需要经历很…...

Oracle视频基础1.2.1练习

1.2.1 需求&#xff1a; 完整格式查看所有用户进程判断oracle启动状态 连接sqlplus不登陆 以sysdba身份登陆&#xff0c;通过登陆信息判断oracle启动状态 启动数据库&#xff0c;查系统全局区动态组件表 使用shell&#xff0c;启动监听然后返回sql ps -ef sqlplus /nolog con…...

15、基于AT89C52的数码电子时钟proteus仿真设计

一、仿真原理图: 二、仿真效果: 三、相关代码: 1、timer0定时中断: void Time0(void ) interrupt 1 using 1 { count++; if(count == 20) { count = 0; second++; if(second >= 60) { second = 0; …...

UML总结

零&#xff1a;学习链接 UML_哔哩哔哩_bilibili 一&#xff1a;UML概述 二&#xff1a;类图 类图&#xff08;Class Diagram&#xff09;是统一建模语言&#xff08;UML&#xff09;中一种重要的图形表示&#xff0c;用于描述系统中的类及其之间的关系。它是面向对象设计中常…...

网站被浏览器提示不安全怎么办?——附解决方案

当你的网站被浏览器标记为不安全时&#xff0c;这通常意味着有一些问题需要解决。以下是一些解决这个问题的步骤&#xff1a; 检查SSL证书&#xff1a;首先&#xff0c;确保你的网站使用了有效的SSL证书。SSL证书可以加密浏览器和服务器之间的数据传输&#xff0c;保护用户数据…...

“前端兼容——CSS篇”(进阶版)

“前端兼容——CSS篇”&#xff08;进阶版&#xff09; 上一篇文章写了css 兼容问题处理的基础篇 点击这里基础篇—传送门&#xff0c;这里想给粉丝分享一下css 更深一点的兼容场景&#xff0c;和处理方案 文章目录 “前端兼容——CSS篇”&#xff08;进阶版&#xff09;进阶CS…...

使用Docker Compose简化微服务部署

文章目录 Docker Compose简介安装Docker Compose在Windows上安装Docker Compose在macOS上安装Docker Compose在Linux上安装Docker Compose 创建Docker Compose文件创建compose文件构建并运行服务 使用Docker Compose网络定义网络验证网络连接 使用Docker Compose卷定义卷使用卷…...

2025考研各省市网上确认时间汇总!

2025考研各省市网上确认时间汇总&#xff01; 安徽&#xff1a;11月1日至5日 福建&#xff1a;11月1日-11月5日 山东&#xff1a;10月31日9:00至11月5日12:00 新疆&#xff1a;10月31日至11月4日17:00 湖南&#xff1a;11月1日9:00-4日12:00 广东&#xff1a;10月下旬至1…...

SSL/TLS 密码套件漏洞分析以及修复方法

1. 前言 在当今数字化时代&#xff0c;网络安全至关重要。SSL/TLS 协议作为保障网络通信安全的重要手段&#xff0c;广泛应用于各类网络应用中。然而&#xff0c;如同任何技术一样&#xff0c;SSL/TLS 也并非绝对安全&#xff0c;存在着一些可能被攻击者利用的漏洞。本文将深入…...

[Vue warn]: Do not use built-in or reserved HTML elements as component id:

这个Vue警告信息表明不要将内置或保留的HTML元素名称用作组件的ID。在Vue中&#xff0c;组件的ID应该是唯一的&#xff0c;以确保没有冲突。很可能是一个保留字或者是一个内置的HTML元素名称&#xff0c;所以Vue拒绝了这样的用法。 解决方法&#xff1a; 更改组件的ID&#x…...

【大数据学习 | kafka】kafka的shell操作

1. topic的管理命令&#xff08;kafka-topics.sh&#xff09; 参数如下&#xff1a; 1.1 创建 # 创建 kafka-topics.sh --bootstrap-server nn1:9092 --create --topic topic_a --partitions 3 --replication-factor 2 # --bootstrap-server 指定集群地址&#xff0c;因为每…...

免费做优化的网站建设/如何做品牌推广方案

前言 2020年是转折的一年&#xff0c;上半年疫情原因&#xff0c;很多学android开发的小伙伴失业了&#xff0c;虽找到了一份工作&#xff0c;但高不成低不就&#xff0c;下半年金九银十有想法更换一份工作&#xff0c;很多需要大厂面试经验和大厂面试真题的小伙伴&#xff0c…...

电子政务网站建设ppt/金戈枸橼酸西地那非片

在很多实际项目中&#xff0c;有一类实际问题&#xff0c;就是将一些图层设置为可选和不可选&#xff0c;类似于地图背景是不能被选择的&#xff0c; 自己添加的一些图元(如GPS应用中的被监控车辆、最优化路径中的必须经过点)是可以选择和编辑的。 设置图层可不可以选择&#x…...

什么网站可以做高数/五年级下册数学优化设计答案

基于注解方式的Bean管理 AOP 写法一:匿名内部类 写法二: AOP操作&#xff08;AspectJ注解&#xff09; AOP操作&#xff08;AspectJ配置文件&#xff09; JdbcTemplate(概念和准备&#xff09;...

goz建站/软文网

下面我们讲解登录功能。首先为了方便我们开发&#xff0c;我们在根目录(www目录)下建立一个项目文件夹&#xff0c;叫joke。接着在joke下建立两个文件夹&#xff0c;一个叫admin后台文件夹&#xff0c;另一个叫home前台文件夹(当然&#xff0c;你也可以使用别的名称&#xff0c…...

如何登录网站制作平台/广告关键词有哪些类型

https://jingyan.baidu.com/article/a948d651c68a280a2ccd2e53.html 首先&#xff0c;我们在电脑的右下角找到目前正在连接的WiFi名称&#xff0c;然后点击鼠标右键&#xff0c;选择弹出的“打开网络和Internet设置” 接着在跳转到的网络和Internet设置对话框&#xff0c;我们…...

内江市住房和城乡建设局网站电话号码/一份完整的电商运营方案

重要提示&#xff1a; 下一版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能&#xff0c;并尽快修改当前还在使用该功能的应用程序。 改为使用链接服务器和链接服务器存储过程。 返回远程 SQL Server 数据库服务器在登录记录中显示的名称。 Transa…...