网站盈利模式有哪几种网络维护费计入什么科目

web/2025/10/7 19:12:09/文章来源:
网站盈利模式有哪几种,网络维护费计入什么科目,织梦网站为什么容易被注入,山东裕达建设工程咨询有限公司网站文章目录JWT工具模块测试JWT工具模块 如果要想在项目之中去使用JWT技术#xff0c;那么就必须结合到已有的模块之中,最佳的做法就是将JWT的相关的处理 操作做为一个自动的starter组件进行接入 1、【microcloud项目】既然要开发一个starter组件#xff0c;最佳的做法就是开发… 文章目录JWT工具模块测试JWT工具模块 如果要想在项目之中去使用JWT技术那么就必须结合到已有的模块之中,最佳的做法就是将JWT的相关的处理 操作做为一个自动的starter组件进行接入 1、【microcloud项目】既然要开发一个starter组件最佳的做法就是开发一个新的模块模块名称:“yootk-starter.jwt ” 2、【microcloud 项目】需要为“yootk-starter-jwt”模块配置所需要的依赖库这些依赖库包括 implementation group: org.springframework.boot, name: spring-boot-configuration-processor, version: 2.5.5 compileOnly group: javax.servlet, name: javax.servlet-api, version: 4.0.1 implementation group: commons-codec, name: commons-codec, version: 1.15 implementation group: io.jsonwebtoken, name: jjwt, version: 0.9.1 implementation group: javax.xml.bind, name: jaxb-api, version: 2.3.1 implementation group: com.sun.xml.bind, name: jaxb-impl, version: 2.3.0 implementation group: com.sun.xml.bind, name: jaxb-core, version: 2.3.03、【microcloud项目】既然已经确定了所需要的项目依赖库随后就可以修改“dependencies.gradle”配置文件定义所依赖模块的配置。 ext.versions [ // 定义全部的依赖库版本号servlet : 4.0.1, // Servlet的依赖库commonsCodec : 1.15, // codec依赖库jjwt : 0.9.1, // jwt依赖库jaxb : 2.3.0, // JAXB依赖库 JDK11需要加的 ] ext.libraries [// 以下的配置为JWT的服务整合servlet-api : javax.servlet:javax.servlet-api:${versions.servlet},commons-codec : commons-codec:commons-codec:${versions.commonsCodec},jjwt : io.jsonwebtoken:jjwt:${versions.jjwt},jaxb-api : javax.xml.bind:jaxb-api:${versions.jaxb},jaxb-impl : com.sun.xml.bind:jaxb-impl:${versions.jaxb},jaxb-core : com.sun.xml.bind:jaxb-core:${versions.jaxb}, ]4、【microcloud项目】修改build.gradle配置文件添加相关的依赖 project(:yootk-starter-jwt) { // JWT的实现组件dependencies {annotationProcessor(org.springframework.boot:spring-boot-configuration-processor)implementation(libraries.servlet-api)implementation(libraries.commons-codec)// 以下的组件会被其他的模块继续引用所以必须将其的编译范围配置为compilecompile(libraries.jjwt)compile(libraries.jaxb-api)compile(libraries.jaxb-impl)compile(libraries.jaxb-core)} }5、【yootk-starter-jwt子模块】由于该模块最终需要进行编译处理所以此时要修改build.gradle配置文件进行任务配置。 jar { enabled true} // 允许打包为jar文件 bootJar { enabled false } // 不允许打包为Boot执行文件 javadocJar { enabled false } // 不需要打包为jar文件 javadocTask { enabled false } // 不需要打包为doc文件6、【yootk-starter-jwt子模块】为了便于用户的信息的相应创建一个JWT响应代码枚举类。 package com.yootk.jwt.code;import javax.servlet.http.HttpServletResponse;public enum JWTResponseCode { // 定义为一个枚举类SUCCESS_CODE(HttpServletResponse.SC_OK, Token数据正确服务正常访问),TOKEN_TIMEOUT_CODE(HttpServletResponse.SC_BAD_REQUEST, Token信息已经失效需要重新申请),NO_AUTH_CODE(HttpServletResponse.SC_NOT_FOUND, 没有找到匹配的Token信息无法进行服务访问);private int code; // 响应的代码private String message; // 响应信息private JWTResponseCode(int code, String message) {this.code code;this.message message;}public String toString() { // 直接将数据以JSON的形式返回return {\code\: this.code ,\message\: this.message };} }7、 【yootk-starter-jwt】此时的yootk-starter-jwt模块最终是一个自动装配的组件那么既然是组件就需要通过一个配置类来读取引用该模块时所添加的配置信息那么创建一个JWTConfigProperties 配置类。 package com.yootk.jwt.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties;Data // Lombok直接生成的所有代码 ConfigurationProperties(prefix yootk.security.config.jwt) // 配置项的前缀 public class JWTConfigProperties { // JWT配置类private String sign; // 保存签名信息private String issuer; // 证书签发者private String secret; // 加密的密钥private long expire; // 失效时间 }8、【yootk-starter-jwt子模块】创建ITokenService服务处理接口专门实现JWT数据的相关处理。 package com.yootk.jwt.service;import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.JwtException;import javax.crypto.SecretKey; import java.util.Map;public interface ITokenService { // 创建一个JWT的操作接口public SecretKey generalKey(); // 获取当前JWT数据的加密KEY// 创建Token的数据内容同时要求保存用户的id以及所需要的附加数据public String createToken(String id, MapString, Object subject);public JwsClaims parseToken(String token) throws JwtException; // 解析Token数据public boolean verifyToken(String token); // 验证Token有效性public String refreshToken(String token); // 刷新Token内容 }9.【yootk-starter-jwt子模块】创建TokenServicelmpl实现子类很多的数据需要通过JSON实现传递。 package com.yootk.jwt.service.impl;import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.yootk.jwt.config.JWTConfigProperties; import com.yootk.jwt.service.ITokenService; import io.jsonwebtoken.*; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value;import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Date; import java.util.HashMap; import java.util.Map; // 此时的组件中的代码需要被其他的模块去引用所以未必会与扫描包相同 public class TokenServiceImpl implements ITokenService {Autowired // SpringBoot容器启动时会自动提供Jackson 实例private ObjectMapper objectMapper; // Jackson的数据处理类对象Autowiredprivate JWTConfigProperties jwtConfigProperties; // 获取JWT的相关配置属性Value(${spring.application.name}) // 通过SpEL进行配置注入private String applicationName; // 应用名称private SignatureAlgorithm signatureAlgorithm SignatureAlgorithm.HS256; // 签名算法Overridepublic SecretKey generalKey() {byte [] encodeKey Base64.decodeBase64(Base64.encodeBase64(this.jwtConfigProperties.getSecret().getBytes()));SecretKey key new SecretKeySpec(encodeKey, 0, encodeKey.length, AES); // 获取加密KEYreturn key;}Overridepublic String createToken(String id, MapString, Object subject) {// 使用JWT数据结构进行开发目的之一就是不需要进行JWT数据的分布式存储所以所谓的缓存组件、数据库都用不到// 所有的Token都存在有保存时效的问题所以就需要通过当前时间来进行计算Date nowDate new Date(); // 获取当前的日期时间Date expireDate new Date(nowDate.getTime() this.jwtConfigProperties.getExpire() * 1000); // 证书过期时间MapString, Object cliams new HashMap(); // 保存所有附加数据cliams.put(site, www.yootk.com); // 视频下载地址顶部有一个下载资源cliams.put(msg, 世界上爆可爱的老师 —— 爆可爱的小李老师); // 随便添加内容cliams.put(nice, Good Good Good);MapString, Object headers new HashMap(); // 保存头信息headers.put(author, 李兴华); // 作者也可以通过配置处理// 后续由于很多的模块都会引用此组件所以为了后续的安全最佳的做法就是设置一个模块名称的信息headers.put(module, this.applicationName);JwtBuilder builder null;try {builder Jwts.builder() // 进行JWTBuilder对象实例化.setClaims(cliams) // 保存附加的数据内容.setHeader(headers) // 保存头信息.setId(id)// 保存ID信息.setIssuedAt(nowDate) // 签发时间.setIssuer(this.jwtConfigProperties.getIssuer()) // 设置签发者.setSubject(this.objectMapper.writeValueAsString(subject)) // 所要传递的数据转为JSON.signWith(this.signatureAlgorithm, this.generalKey()) // 获取签名算法.setExpiration(expireDate); // 配置失效时间} catch (JsonProcessingException e) {e.printStackTrace();}return builder.compact(); // 创建Token}Overridepublic JwsClaims parseToken(String token) throws JwtException {if (this.verifyToken(token)) { // 只有正确的时候再进行Token解析JwsClaims claims Jwts.parser().setSigningKey(this.generalKey()).parseClaimsJws(token);return claims;}return null; // 解析失败返回null}Overridepublic boolean verifyToken(String token) {try {Jwts.parser().setSigningKey(this.generalKey()).parseClaimsJws(token).getBody();return true; // 没有异常就返回true} catch (Exception e) {}return false;}Overridepublic String refreshToken(String token) {if (this.verifyToken(token)) {JwsClaims jws this.parseToken(token); // 解析Token数据return this.createToken(jws.getBody().getId(), this.objectMapper.readValue(jws.getBody().getSubject(), Map.class));}return null;} }10、【yootk-starter-jwt子模块】定义一个加密的属性配置 package com.yootk.jwt.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties;Data ConfigurationProperties(prefix yootk.security.config.password.encrypt) // 配置前缀 public class EncryptConfigProperties { // 加密配置属性private Integer repeat; // 定义重复的次数private String salt; // 加密的盐值 } 11、【yootk-starter-jwt子模块】既然所有的用户的信息都要保存在数据表里面那么就需要进行密码的加密处理。 package com.yootk.jwt.service;public interface IEncryptService { // 密码加密public String getEncryptPassword(String password); // 得到一个加密后的密码 }12、【yootk-starter-jwt子模块】定义具体的实现子类 package com.yootk.jwt.service.impl;import com.yootk.jwt.config.EncryptConfigProperties; import com.yootk.jwt.service.IEncryptService; import org.springframework.beans.factory.annotation.Autowired;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64;public class EncryptServiceImpl implements IEncryptService {Autowiredprivate EncryptConfigProperties encryptConfigProperties; // 属性配置private static MessageDigest MD5_DIGEST; // MD5加密处理private static final Base64.Encoder BASE64_ENCODER Base64.getEncoder(); // 加密器static { // 初始化操作try {MD5_DIGEST MessageDigest.getInstance(MD5);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}Overridepublic String getEncryptPassword(String password) {String saltPassword { this.encryptConfigProperties.getSalt() } password;for (int x 0 ; x this.encryptConfigProperties.getRepeat(); x ) {saltPassword BASE64_ENCODER.encodeToString(MD5_DIGEST.digest(saltPassword.getBytes()));}return saltPassword;} }13、【yootk-starter-jwt子模块】创建JWT自动配置类 package com.yootk.jwt.autoconfig;import com.yootk.jwt.config.EncryptConfigProperties; import com.yootk.jwt.config.JWTConfigProperties; import com.yootk.jwt.service.IEncryptService; import com.yootk.jwt.service.ITokenService; import com.yootk.jwt.service.impl.EncryptServiceImpl; import com.yootk.jwt.service.impl.TokenServiceImpl; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration EnableConfigurationProperties({JWTConfigProperties.class, EncryptConfigProperties.class}) // 配置注入属性 public class JWTAutoConfiguration {Bean(tokenService)public ITokenService getTokenServiceBean() {return new TokenServiceImpl();}Bean(encryptService)public IEncryptService getEncryptServiceBean() {return new EncryptServiceImpl();} } 14、【yootk-starter-jwt子模块】在“src/main/resources”目录之中创建“META-INF/spring.factories”配置文件 org.springframework.boot.autoconfigure.EnableAutoConfiguration com.yootk.jwt.autoconfig.JWTAutoConfiguration15、【yootk-starter-jwt子模块】模块开发完成之后来进行编译: gradle build 16、【yootk-starter-jwt子模块】既然已经成功的实现了模块的编译处理随后就需要进行一些环境上的测试创建SpringBoot的配置文件: application.yml yootk:security:config:jwt:sign: muyanissuer: Muyansecret: yootkexpire: 100 # 单位秒password:encrypt:repeat: 5salt: yootkspring:application:name: JWT-TEST 测试 17、【yootk-starter-jwt子模块】创建一个程序启动的主类主要是进行测试用的 package com.yootk.jwt;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class StartJWTConfiguration {public static void main(String[] args) {SpringApplication.run(StartJWTConfiguration.class, args);} }18、【yootk-starter-jwt子模块】编写测试程序进行TokenService测试 package com.yootk.test;import com.yootk.jwt.StartJWTConfiguration; import com.yootk.jwt.service.ITokenService; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.JwsHeader; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.web.WebAppConfiguration;import java.util.HashMap; import java.util.Map; import java.util.UUID;ExtendWith(SpringExtension.class) WebAppConfiguration SpringBootTest(classes StartJWTConfiguration.class) // 随便写的测试类 public class TestTokenService { // 代码测试Autowiredprivate ITokenService tokenService;private String jwt eyJhdXRob3IiOiLmnY7lhbTljY4iLCJtb2R1bGUiOiJKV1QtVEVTVCIsImFsZyI6IkhTMjU2In0.eyJtc2ciOiLkuJbnlYzkuIrniIblj6_niLHnmoTogIHluIgg4oCU4oCUIOeIhuWPr-eIseeahOWwj-adjuiAgeW4iCIsInN1YiI6IntcInJpZHNcIjpcIlVTRVI7QURNSU47REVQVDtFTVA7Uk9MRVwiLFwibmFtZVwiOlwi5rKQ6KiA56eR5oqAIOKAlOKAlCDmnY7lhbTljY5cIixcIm1pZFwiOlwibXV5YW5cIn0iLCJzaXRlIjoid3d3Lnlvb3RrLmNvbSIsImlzcyI6Ik11eWFuWW9vdGsiLCJleHAiOjE2MzM2NzE3NjcsImlhdCI6MTYzMzU3MTc2NywibmljZSI6Ikdvb2QgR29vZCBHb29kIiwianRpIjoieW9vdGstMDgwNGI3NDQtNTBjZC00NjI2LTgzNmEtNjA1MmFiZWMyYzQ4In0.O71QGGPtWYwL7Tyhx8iOLQFAWc1DmVlAS4i0N99OJJk; // 测试解析使用的Testpublic void testCreateToken() {MapString, Object map new HashMap(); // 测试生成map.put(mid, muyan);map.put(name, 沐言科技 —— 李兴华);map.put(rids, USER;ADMIN;DEPT;EMP;ROLE); // 用户角色信息String id yootk- UUID.randomUUID(); // 随意生成一个JWT-ID数据System.out.println(this.tokenService.createToken(id, map));}Testpublic void testParseToken() { // 解析Token数据内容JwsClaims jws this.tokenService.parseToken(jwt);System.out.println(JWT签名数据 jws.getSignature()); // 获取签名数据JwsHeader headers jws.getHeader(); // 获取头信息headers.forEach((headerName, headerValue) - {System.out.println(【JWT头信息】 headerName headerValue);});Claims claims jws.getBody();claims.forEach((bodyName, bodyValue) - {System.out.println(【JWT数据】 bodyName bodyValue);});} Testpublic void testVerifyJWT() {System.out.println(【JWT数据验证】 this.tokenService.verifyToken(jwt));}Testpublic void testRefreshJWT() {System.out.println(【JWT数据刷新】 this.tokenService.refreshToken(jwt));} }19、【yootk-starter-jwt子模块】随后进行密码加密的测试 package com.yootk.test;import com.yootk.jwt.StartJWTConfiguration; import com.yootk.jwt.service.IEncryptService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.web.WebAppConfiguration;ExtendWith(SpringExtension.class) WebAppConfiguration SpringBootTest(classes StartJWTConfiguration.class) // 随便写的测试类 public class TestEncryptService {Autowiredprivate IEncryptService encryptService;Testpublic void testCreatePassword() {System.out.println(this.encryptService.getEncryptPassword(hello));} } 此时已经成功的开发出了一套完整的与JWT相关的应用组件模块使用的时候直接导入依赖库即可应用。

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

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

相关文章

有百度推广的网站建设网站都需要准备什么材料

目录 一、实时嵌入式操作系统 1.1 概述 1.2 什么“实时” 1.3 什么是硬实时和软实时 1.4 什么是嵌入式 1.5 什么操作系统 二、常见重量级操作系统 三、常见轻量级嵌入式操作系统 3.1 概述 3.2 FreeRTOS 3.3 uC/OS-II 3.4 RT-Thread 3.5 RT-Thread、uC/OS-II、Free…

做商务网站服务网站建立的具体步骤

学习目标: 项目 实验 学习时间: 2023.11.24-2023.12.1 学习产出: 项目 由于小程序要上线了,这周前几天都在和前端联调改bug,并且多拆分出来两张表,工作量比较大,花的时间很多。 实验 整…

湛江网站制作计划聊天网站开发

1.Axure是什么??? Axure是一款功能强大的原型设计工具,它可以让用户快速地创建交互式原型,并针对原型进行测试和改进。Axure的主要特点包括可定制的界面元素库、交互动画效果、条件逻辑、团队协作等功能,适…

小白建设论坛网站科技部网站建设合同

namespace hunan\changsha class Person{ static $namewu_han; } namespace hunan\changsha 声明命名空间,它的作用包括方法,类名,常量,这三者都统称为元素 当在程序里使用元素的时候,默认在当前的命名空间里找该元素…

青岛建设网站设计公司合肥网站排名优化公司哪家好

关键条目:ERROR 1045(28000): Access deniedforuserrootlocalhost(using password: YES)这个错误1045(28000)的本质其实就是访问被拒绝,问题原因也很简单,就是用户密码不适用,也可以理解为用户或密码错误。Access deniedforuserro…

网站关键词优化seo关键词之间最好用逗号淄博手机网站建设公司

本接线大家介绍一下Google SVN托管和Google SVN使用问题,本人用过一段时间Google SVN,有一些自己的心得和大家分享一下,希望对你有所启示。 Google SVN的使用http://tortoisesvn.net/downloads这里可以下svn,再发给创建者你的Goog…

哪家做网站的公司比较好网站导航条内容

哈哈转载于:https://www.cnblogs.com/zzzzw/p/5182224.html

徐州网站建设哪家好薇管理网络的应用软件

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题、玩…

怎么查询网站的建站时间定制规划设计公司

要知道C/CLI是什么,首先知道什么是CLI。 一、CLI简介 CLI:(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环境的规范。更通俗的我们可以说它是一个虚拟平台,是操作系统和应用程序间的一层抽象…

西安高科鱼化建设有限公司网站网站建设平台卜先明

基础篇 基础篇要点:算法、数据结构、基础设计模式 1. 二分查找 要求 能够用自己语言描述二分查找算法能够手写二分查找代码能够解答一些变化后的考法 算法描述 前提:有已排序数组 A(假设已经做好) 定义左边界 L、右边界 R&…

工信部网站备案查询验证码错误揭阳市php网站开发找工作

旅游管理复试很难?! 别怕!经验超丰富的老学姐来给你们出谋划策啦! 最近是不是被旅游管理考研复试折磨得够呛?莫慌!我这有着丰富复试指导经验的老学姐来帮你们排雷,助力大家顺利上岸&#xff01…

免费ppypp网站唐山做企业网站

题目说明: 语法定义涉及数字、括号和运算符和-的表达式的语法。起始符号为Expression。一个表达式应该对应于以下之一:一个数字标记Expression ExpressionExpression - Expression- Expression( Expression ) level help 通过语法来描述高级语言的…

手机网站做落地页开源网站模板cms

一、程序调试的debug宏 1、程序调试的常见方案 单步调试、裸机LED调试、打印信息、log文件 利用调试器进行单步调试(譬如IDE中,Jlink)适用于新手,最大的好处就是直观,能够帮助找到问题。缺点是限制性大、速度慢。裸机…

没有网站可以做备案吗网站推广网络

注意点 private File image;//对应的就是表单中文件上传的那个输入域的名称,Struts2框架会封装成File类型的private String imageFileName;// 上传输入域FileName 文件名private String imageContentType;// 上传文件的MIME类型 单个文件 1 package cn.itcast.ac…

网站为什么会出现死链互联网保险案例

啥是MCU,MCU科普 附赠自动驾驶学习资料和量产经验:链接 MCU是Microcontroller Unit 的简称,中文叫微控制器,俗称单片机,是把CPU的频率与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等…

医疗室内设计网站推荐网络营销策划书模板

本篇文章主要介绍了详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件,具有一定的参考价值,有兴趣的可以了解一下使用vue-cli构建的vue项目,webpack的配置文件是分散在很多地方的,而我们需要修改的是build/webpack.base…

led外贸网站合肥做网站yuanmus

缺省参数 调用函数时,缺省参数的值如果没有传入,则被认为是默认值。 下例会打印默认的age,如果age没有被传入. def printinfo( name,age 35 ): # 打印任何传入的字符串 print "Name: ", name print "Age ", age #调…

深圳seo网站桂林北站到象鼻山多远

1 永远不要质疑二哈▼2 睡觉也不耽误练功▼3 谁还没为数学考试受过伤呢?▼4 可能我的嘴巴安装了笑话过滤器吧▼5 我书读得少,你别吓唬我▼6 希望狗没事儿▼7 海王的微信壁纸事实证明,会计确实不赚钱▼你点的每个赞,我都认真…

做网站 做app企业+php网站建设

最近的研究需要做一个软件,从一些方面中学习了下面的。当然,这些都是需求只是初步框架。也创下了基本的设计和开发,只是让软件公司可能对软件整体的了解需求和促进软件有一个粗略的估计。公司 实现的根本目的 现有的软件的情况下(…

深圳租赁住房和建设局网站企业网站建设公司网络服务

2023年8月25日&#xff0c;周五上午 今天上午学习设计模式中的策略模式时&#xff0c;发现这个有点像很多卡通片里面的变身器... #include<iostream>//alien hero是外星英雄的意思 //在《少年骇客》中&#xff0c;主角可以通过变身器变成10种外星英雄 class AlienHero{ …