Day40:安全开发-JavaEE应用SpringBoot框架JWT身份鉴权打包部署JARWAR

目录

SpringBoot-身份鉴权-JWT技术

SpringBoot-打包部署-JAR&WAR

思维导图


Java知识点

功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方组件使用等.

框架库:MyBatis,SpringMVC,SpringBoot,Shiro,Log4j,FastJson等

技术:Servlet,Listen,Filter,Interceptor,JWT,AOP,反射机制待补充

安全:SQL注入,RCE执行,反序列化,脆弱验证,未授权访问,待补充

安全:原生开发安全,第三方框架安全,第三方组件安全等,架构分析,待补充

SpringBoot-身份鉴权-JWT技术

JWT ( JSON  Web Token ) 是由服务端用加密算法对信息签名来保证其完整性和不可伪造;

Token里可以包含所有必要信息,这样服务端就无需保存任何关于用户或会话的信息;

JWT用于身份认证、会话维持等。由三部分组成,header、payload与signature。

参考:https://cloud.tencent.com/developer/article/2101634

Header、Payload 和 Signature 是 JSON Web Token(JWT)的三个主要组成部分。
Header(头部): JWT 的头部通常包含两部分信息:声明类型(typ)和使用的签名算法(alg)。这些信息以 JSON 格式存在,然后进行 Base64 编码,形成 JWT 的第一个部分。头部用于描述关于该 JWT 的元数据信息。
 

{"alg": "HS256","typ": "JWT"
}

Payload(负载): JWT 的负载包含有关 JWT 主题(subject)及其它声明的信息。与头部一样,负载也是以 JSON 格式存在,然后进行 Base64 编码,形成 JWT 的第二个部分。

{"sub": "1234567890","name": "John Doe","iat": 1516239022
}

Signature(签名): JWT 的签名是由头部、负载以及一个密钥生成的用于验证 JWT 的真实性和完整性。签名是由指定的签名算法对经过 Base64 编码的头部和负载组合而成的字符串进行签名生成的。

例如,使用 HMAC SHA-256 算法生成签名:

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

最终,JWT 是由这三个部分组成的字符串,形如header.payload.signature。JWT 通常用于在网络上安全地传输信息,例如在身份验证过程中传递令牌。

创建项目引入依赖

引入依赖:

<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.4.0</version>
</dependency>

项目目录如下:

创建JWT并配置JWT,对应目录下创建JwtController.java

package cn.xiaodi.testjwt.demos.web;import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class JwtController {//模拟用户的jwt身份创建 数据的jwt加密@PostMapping("/jwtcreate")@ResponseBodypublic static String main(Integer id,String user,String pass) {String jwttoken = JWT.create()//设置创建的header部分//.withHeader()//设置创建的payload部分.withClaim("userid", id).withClaim("username", user).withClaim("password", pass)//设置时效(JWT过期时间)//.withExpiresAt()//创建设置的signature部分 算法和密匙.sign(Algorithm.HMAC256("xiaodisec"));System.out.println(jwttoken);return jwttoken;}//模拟JWT身份的检测 jwt数据解密@PostMapping("/jwtcheck")@ResponseBodypublic static String  jwtcheck(String jwtdata){//String jwtdata="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNzd29yZCI6ImExMjM0NTYiLCJ1c2VyaWQiOjEsInVzZXJuYW1lIjoiYWRtaW4ifQ.nkMIxHJKyGAHa3aDtTAy5_9j51yWDTQHEL8n-dqE33w";//构建解密注册JWTVerifier jwt = JWT.require(Algorithm.HMAC256("xiaodisec")).build();//解密注册数据DecodedJWT verify = jwt.verify(jwtdata);//提取注册解密数据 payload部分Integer userid = verify.getClaim("userid").asInt();String username=verify.getClaim("username").asString();String password=verify.getClaim("password").asString();System.out.println(userid+username+password);return "admin page";//        if(username.equals("admin")){
//            return "admin";
//        }else {
//            return "gay?";
//        }//攻击者要模拟使用xiaodi用户去登录//提取header部分//verify.getHeader();//提取sign签名部分//verify.getSignature();}}

配置前端提交数据访问客户端页面,在resources→static→index.html创建如下的前端页面

<html>
<body>
<h1>hello word!!!</h1>
<p>this is a html page</p><form action="../jwtcreate" method="post">id:<input type="text" name="id"><br>user:<input type="text" name="user"><br>pass:<input type="text" name="pass"><br><input type="submit" value="create">
</form><form action="../jwtcheck" method="post">jwtdata:<input type="text" name="jwtdata"><br><input type="submit" value="check">
</form></body>
</html>

对应输入id,用户名,密码,点击创建得到token

在官网进行解密,在页面对应输入对应jwtdata,进行解密

跳转至解密成功页面,回显admin page

为什么说jwt是安全的?

因为token解密加密需要密钥,密钥都保存在服务端里。你可以轻易伪造出用户信息但是得不到密钥,就无法通过服务端token解密,鉴权失败。

所以很多开发者往往是密文能被解密,就认定通过。

安全问题:

 

SpringBoot-打包部署-JAR&WAR

参考:https://mp.weixin.qq.com/s/HyqVt7EMFcuKXfiejtfleg
SpringBoot项目打包在linux服务器中运行:
①jar类型项目
        jar类型项目使用SpringBoot打包插件打包时,会在打成的jar中内置tomcat的jar。
        所以使用jdk直接运行jar即可,jar项目中功能将代码放到其内置的tomcat中运行。
②war类型项目
        在打包时需要将内置的tomcat插件排除,配置servlet的依赖和修改pom.xml,
        然后将war文件放到tomcat安装目录webapps下,启动运行tomcat自动解析即可。

Jar打包运行方式:

  1. 在 IDEA 中右侧打开 Maven,点击生命周期,一般需双击 clean 清除一下缓存。
  2. 然后双击 package,等待运行完毕,目录下会多一个 target 目录
  3. 复制其中的.jar 文件到目标服务器,运行以下命令即可

报错解决:

https://blog.csdn.net/Mrzhuangr/article/details/124731024

https://blog.csdn.net/wobenqingfeng/article/details/129914639

War类型项目

1、pom.xml加入或修改:<packaging>war</packaging>

若无则直接添加,若有 packaging 但是为 jar,则修改为 war 即可
 

2、启动类里面加入配置

@SpringBootApplication
// @SpringBootApplication 注解用于标识这是一个Spring Boot应用程序的主类,它会自动扫描并加载与主类同包或子包下的组件。
public class TestJwtApplication **extends SpringBootServletInitializer** {public static void main(String[] args) {// SpringApplication.run() 用于启动Spring Boot应用程序。SpringApplication.run(TestJwtApplication.class, args);}**@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {// configure() 方法用于配置Spring Boot应用程序的构建,主要用于支持WAR文件的部署。return builder.sources(TestJwtApplication.class);}**
}

3、maven-clean-package

4、war放置tomcat的G:\develop\apache-tomcat-9.0.27\webapps 文件夹后启动

G:\develop\apache-tomcat-9.0.27\bin运行该文件夹下的tomcat的startup.bat启动程序

JAVAEE 源码架构:无源码下载泄漏风险;源码泄漏也需反编译

无源码下载泄漏风险:网站应用是运行jar的形式,类似exe客户端

没有泄露的风险

源码泄漏也需反编译

最简单的 jar 包反编译方法:解压缩直接将 jar 包解压出来后使用 IDEA 直接打开项目,会自动反编译得到源码,不过项目里面的注释会消失。

思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat 面试题及答案整理,最新面试题

Navicat 在数据库管理中的主要用途有哪些&#xff1f; Navicat 是一款数据库管理工具&#xff0c;其主要用途包括&#xff1a; 1、多数据库支持&#xff1a; Navicat 支持多种数据库连接&#xff0c;包括 MySQL、Oracle、PostgreSQL、SQLite、SQL Server 等&#xff0c;方便用…

湖南麒麟SSH服务漏洞

针对湖南麒麟操作系统进行漏洞检测时&#xff0c;会报SSH漏洞风险提醒&#xff0c;具体如下&#xff1a; 针对这些漏洞&#xff0c;可以关闭SSH服务&#xff08;前提是应用已经部署完毕不再需要通过SSH远程访问传输文件的情况下&#xff0c;此时可以通过VNC远程登录方法&#x…

Github Copilot 工具,无需账号,一键激活

① 无需账号&#xff0c;100%认证成功&#xff01;0风险&#xff0c;可联网可更新&#xff0c;&#xff0c;支持copilot版本升级&#xff0c;支持chat ② 支持windows、mac、linux系统等设备 ③一号通用&#xff0c;支持所有IDE(AppCode,CLion,DataGrip,GoLand,IntelliJ IDEA …

51单片机-AT24C02(I2C总线)

目录 一&#xff0c;介绍及元件工作原理 7.时序结构&#xff08;重要&#xff09; 8.i2C总线数据帧&#xff08;重要&#xff09; 二&#xff0c;应用 一&#xff0c;介绍及元件工作原理 1.元件介绍 2.存储器 3.地址总线和数据总线 地址总线只能一次选中一行 4.引脚及应用…

java上传和下载文件使用教程

文章目录 前言一、引入库二、上传文件1.前台2.后台3.测试 三、下载文件(chrome)1.前台2.后台3.测试 总结 前言 本篇文章介绍java中文件的上传和下载&#xff0c;亲测可用&#xff0c;所用案例为springboot项目。 一、引入库 <!-- SpringBoot Web容器 --> <dependenc…

【原创】java+swing+mysql二手车交易管理系统

前言&#xff1a; 本文主要介绍了二手车交易管理设计与实现。首先&#xff0c;通过市场需求&#xff0c;我们确定了二手车的功能&#xff0c;通常的二手车交易系统都是B/S架构&#xff0c;然而我们今天要用javaswing去开发一个C/S架构的二手车交易管理系统&#xff0c;主要功能…

【QT入门】VS2019+QT的开发环境配置

声明&#xff1a;该专栏为本人学习Qt知识点时候的笔记汇总&#xff0c;希望能给初学的朋友们一点帮助(加油&#xff01;) 往期回顾&#xff1a; 【QT入门】什么是qt&#xff0c;发展历史&#xff0c;特征&#xff0c;应用&#xff0c;QtCreator-CSDN博客【QT入门】Windows平台下…

Spark-Scala语言实战(2)(在IDEA中安装Scala,超详细配图)

之前的文章中&#xff0c;我们学习了如何在windows下下载及使用Scala&#xff0c;但那对一个真正想深入学习Scala的人来说&#xff0c;是不够的&#xff0c;今天我会给大家带来如何在IDEA中安装Scala。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的…

嵌入式硬件设计(一)|利用 NodeMCU-ESP8266 开发板和继电器结合APP“点灯•blinker”制作Wi-Fi智能开关(附有关硬件详细资料)

概述 本文主要讲述利用 NodeMCU-ESP8266 开发板和继电器通过手机 APP “ 点灯 • Blinker ” 制作一款能够由手机控制的WiFi 智能开关&#xff0c;从而实现智能物联。NodeMCU 是基于 Lua 的开源固件&#xff0c;ESP8266-NodeMCU是一个开源硬件开发板&#xff0c;支持WiFi功能&a…

springboot基于spring boot的在线答题微信小程序

摘 要 在线答题微信小程序是考试中重要的一环&#xff0c;在线答题是学生获取任务信息的主要渠道。为了方便学生能够在网站上查看任务信息、考试&#xff0c;于是开发了基于 springboot框架设计与实现了一款简洁、轻便的在线答题微信小程序。本微信小程序解决了在线答题事务中的…

【RS422】基于未来科技FT4232HL芯片的多波特率串口通信收发实现

功能简介 串行通信接口常常用于在计算机和低速外部设备之间传输数据。串口通信存在多种标准&#xff0c;以RS422为例&#xff0c;它将数据分成多个位&#xff0c;采用异步通信方式进行传输。   本文基于Xilinx VCU128 FPGA开发板&#xff0c;对RS422串口通信进行学习。   根…

面向控制台编程?Java的GUI开发

记得之前刚开始学习Java&#xff0c;按部就班去阅读《Java核心技术》这本书的时候&#xff0c;总是听别人提起&#xff0c;java swing那一章不用看了。然后直到对着控制台编程了半年&#xff0c;回来捡起了Swing图形界面&#xff0c;跟着网上搞了坦克大战的游戏&#xff0c;总觉…

关于数据通信知识的补充——第二篇

目录 四.二层交换机 5.实现不同vlan通信的原理 方法一&#xff1a;路由器网关 方法二&#xff1a;单臂路由 方法三&#xff1a;三层交换机 五.三层路由技术 &#xff08;1&#xff09;直连路由 &#xff08;2&#xff09;静态路由 &#xff08;3&#xff09;动态路由 …

【Poi-tl Documentation】区块对标签显示隐藏改造

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板&#xff1a; 删除行表格测试.docx 改造前测试效果 package run.siyuan…

爬虫学习 Scrapy中间件代理UA随机selenium使用

目录 中间件UA、代理处理---process_requestUA随机 代理处理seleniumscrapy 中间件 控制台操作 (百度只起个名 scrapy startproject mid scrapy genspider baidu baidu.com setting.py内 ROBOTSTXT_OBEY FalseLOG_LEVEL "WARNING"运行 scrapy crawl baidu middle…

FFmpeg 常用命令汇总

​​​​​​经常用到ffmpeg做一些视频数据的处理转换等&#xff0c;用来做测试&#xff0c;今天总结了一下&#xff0c;参考了网上部分朋友的经验&#xff0c;一起在这里汇总了一下。 1、ffmpeg使用语法 命令格式&#xff1a; ffmpeg -i [输入文件名] [参数选项] -f [格…

【DFS深度优先搜索专题】【蓝桥杯备考训练】:迷宫、奶牛选美、树的重心、大臣的旅费、扫雷【已更新完成】

目录 1、迷宫&#xff08;《信息学奥赛一本通》&#xff09; 2、奶牛选美&#xff08;USACO 2011 November Contest Bronze Division&#xff09; 3、树的重心&#xff08;模板&#xff09; 4、大臣的旅费&#xff08;第四届蓝桥杯省赛Java & C A组&#xff09; 5、扫…

R语言实现中介分析(1)

中介分析&#xff0c;也称为介导分析&#xff0c;是统计学中的一种方法&#xff0c;它用于评估一个或多个中介变量&#xff08;也称为中间变量&#xff09;在自变量和因变量之间关系中所起的作用。换句话说&#xff0c;中介分析用于探索自变量如何通过中介变量影响因变量的机制…

Uniapp有奖猜歌游戏系统源码,附带流量主

有奖猜歌游戏是一款基于uni-app、uniCloud、uniAD 开发的小游戏&#xff0c;通过猜歌曲、观看广告赚取现金奖励。 游戏基本特征 玩家可以通过猜歌、做任务等方式直接获取现金奖励 玩家可以通过猜歌、拆红包、做任务等方式获取金币奖励&#xff0c;当金币累积到一定数量可以兑…

以题为例浅谈文件包含

什么叫做文件包含 文件包含函数加载的参数没有经过过滤或严格定义&#xff0c;可以被用户控制&#xff0c; 包含其他恶意文件&#xff0c;导致了执行非预期代码。 文件包含漏洞&#xff08;File Inclusion Vulnerability&#xff09;是一种常见的网络安全漏洞&#xff0c;它允…