欢迎来到Heck's Blog,专业承接拿站、企业建站、仿站、网上商城架构、门户网站搭建、空间域名注册、软件定制等项目。关注网络安全,因为专注,所以专业,懂得放弃,才能收获。有事请发邮件至i@heckjj.com,请记住本站网址:http://www.heckjj.com,多谢。
12月4
配置证书
打开CMD输入命令:

keytool -genkey -alias heck -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore heck-ssl-key.p12 -validity 3650

证书会下载到当前目录下:
server:
  port: 443
  ssl:
    # 证书的路径,可用绝对路径,如果放到项目资源文件路径需要添加 classpath:
    key-store: classpath:heck-ssl-key.p12
    key-store-password: 123456
    key-store-type: PKCS12


可能还会报异常DerInputStream.getLength(): lengthTag=111, too big.  
Could not load key store 'classpath:heck-ssl-key.p12':


可以pom.xml 把这个文件加入编译,

<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <nonFilteredFileExtensions>
                        <!--<nonFilteredFileExtension>p12</nonFilteredFileExtension>-->
                        <nonFilteredFileExtension>jks</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
        </plugins>

刷新 Maven,clean 后重新 compile。

11月5

Restful API规范

10:18Web开发  From: 本站原创
一、简介
        RESTful API 是应用程序接口 (API) 的一种架构风格,它使用 HTTP 请求来访问和使用数据。该数据可用于 GET、PUT、POST 和 DELETE 数据类型,这些数据类型是指有关资源的操作的读取、更新、创建和删除。

        RESTful API(也称为 RESTful Web 服务或 REST API)基于表示状态传输 (REST),它是一种架构风格和经常用于 Web 服务开发的通信方法。

二、设计原则。
URL即资源,使用名词表示资源
接口应直观、简洁、风格命名保持一致
必须版本化,具有足够的灵活性来支持上层UI
三、RFC3986标准。
        RFC3986标准,简单讲就是规定了如下:除了 数字 + 字母 + -_.~ 不会被转义,其他字符都会被以百分号(%)后跟两位十六进制数 %{hex} 的方式进行转义。

         www 的 post form data 也就是 x-www-form-urlencode 的编码规则:除 -_.(没有 ~) 之外的所有 非字母、非数字 的字符都将被替换成 百分号(%)后跟两位十六进制数 %{hex},空格(注意)则编码为加号 +。

        RFC3986对 ~ 不做转码,x-www-form-urlencode 对 ~ 做转码 %7E。

        RFC3986对 空格 转为 %20,x-www-form-urlencode 对 空格 转为 +。

        JS的URL编码方式:encodeURIComponent。

// encodeURIComponent
console.log(encodeURIComponent("hello233 ~-_."))
hello233%20~-_.
10月22
Linxu开机出现 Generating "/run/initramfs/rdsosreport.txt"解决方案
点击在新窗口中浏览此图片

解决:
一、找这个-root结尾的文件也不一样。

大家可以用ls /dev/mapper查看到自己装的镜像对应的以-root结尾的文件是哪个。
点击在新窗口中浏览此图片

二、所以我们运行的是:xfs_repair /dev/mapper/cl-root
点击在新窗口中浏览此图片
还是报错的话需要

需要卸载掉 (会丢数据,没办法,总比重做系统方便吧)
7月3
提示如下,无法正常激活:
点击在新窗口中浏览此图片
我们无法在此设备上激活Windows,因为无法连接到你的组织的激活服务器。请确保已连接到你的组织的网络,然后重试。
如果仍存在激活问题,请联系组织的支持人员。
错误代码:0x8007007B


解决方法:
1、左下角搜索 cmd ,以管理员身份运行:

点击在新窗口中浏览此图片

2、 输入以下命令,回车

slmgr /skms kms.03k.org


3、再输入以下命令,回车,再去激活一般就没有问题了

slmgr /ato
点击在新窗口中浏览此图片
注意:如果笔记本遇到这种插了网线网络正常,但是显示没网的情况,要连下WiFi,否则可能激活不成功
点击在新窗口中浏览此图片
5月16
我正在使用旧版Spring应用程序,并且想要迁移到Spring Boot。我的意图是使用spring-boot-starter-data- jpa。因此,我在pom.xml(管理所有spring-boot-dependencies)中添加了以下部分:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>
但这搞砸了我暂时需要保留的某些依赖项。我目前正在使用Selenium依赖项(版本2.53.0;从另一个项目中过渡添加),但是spring-
boot正在获取的依赖项3.9.1。

我想排除3.9.1依赖关系,但exclusion过滤器无法按预期工作。

不能乱<excludes>然后尝试弄清楚您需要再次包含什么(在弄清楚要排除的内容之后)。只需覆盖《Spring
Boot参考指南》中此处解释的版本即可。

假设您将spring-boot-starter- parent用作父项,则只需将a添加<selenium.version>到您的<properties>部分中即可指定所需的版本。

<properties>
  <selenium.version>2.53.0</selenium.version>
</properties>
这将使Spring Boot使用所需的版本。
3月12
IDEA的Service窗口误删服务(也就是点到了Hide Configuration选项)后如何恢复

看下到底是做了什么操作导致的服务被隐藏  (赶时间直接到最后看解决方案就行)
正常情况下, 在开启窗口的情况下, 会显示我们所有的微服务启动类, 如下图
点击在新窗口中浏览此图片


idea在service窗口中显示多个服务如下:在这里插入图片描述
.idea > workspace.xml 中找到 RunDashboard 替换成如下


  <component name="RunDashboard">
    <option name="configurationTypes">
      <set>
        <option value="SpringBootApplicationConfigurationType" />
      </set>
    </option>
    <option name="ruleStates">
      <list>
        <RuleState>
          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
        </RuleState>
        <RuleState>
          <option name="name" value="StatusDashboardGroupingRule" />
        </RuleState>
      </list>
    </option>
  </component>
1月2
在SpringBoot中使用单元测试时,出现以下报错,意思是创建名为‘serverEndpointExporter’的bean时出错。
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[20240102 14:42:43][main][ERROR][org.springframework.boot.SpringApplication:854] Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverEndpointExporter' defined in class path resource [com/nine/rivers/bms/system/config/WebSocketConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
  at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
  at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
  at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
  at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:765)
  at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
  at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
  at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:121)
  at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
  at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
  at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124)
  at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
  at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
  at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248)
  at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:350)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:355)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$7(ClassBasedTestDescriptor.java:350)
  at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
  at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
  at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
  at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
  at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
  at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
  at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743)
  at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742)
  at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:349)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$4(ClassBasedTestDescriptor.java:270)
  at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:269)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:259)
  at java.util.Optional.orElseGet(Optional.java:267)
  at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:258)
  at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
  at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:101)
  at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:100)
  at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:65)
  at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:111)
  at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:111)
  at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:79)
  at java.util.ArrayList.forEach(ArrayList.java:1259)

问题分析
通过报错提示可以看出,在创建命名为 ‘serverEndpointExporter’ 的bean时出错,而这个bean是webscoket中的,而webscoket是需要依赖tomcat等容器才能启动的,恰巧运行单元测试不需要依赖tomcat容器,两者互相矛盾这就是出现该问题的原因了。

问题解决
使用tomcat容器运行单元测试,在注解 @SpringbootTest 中追加以下内容即可:
@SpringbootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
12月25
前后端通过websocket通信,但是需要鉴权,可以利用websocket的子协议来传输token,代码如下:
var ws = new WebSocket("ws://localhost/ws",[token]);
在后面加上[这里是token内容]。这样请求头就会携带:
Sec-WebSocket-Protocol:token value
参数是一个数组。如果数组有多个值,后端也会接受到逗号隔开的值。
后端可以获取这个token进行鉴权。
重点来了!
如果传递了token参数,后端响应的时候,也必须带上这个token响应!否则前端接收不到数据!
我竟然忘记前端传过来的token是加密后的,首先解密后去校验,通过后再把原加密token放在响应头即可, 如果不一致也会导致前端接收不到消息。
如下是java的例子“:
HttpServletResponse response = (HttpServletResponse)servletResponse;
response.setHeader("Sec-WebSocket-Protocol", token);
12月21
什么是实时主备?
  实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务
1、环境准备
  服务器 主库IP:192.168.90.41   dm8数据库 实例名 :RAC1 端口号:5236
  服务器 备库IP:192.168.90.42   dm8数据库 实例名 :RAC2 端口号:5236
  # 数据库启动服务命令路径/dm8/bin,实例配置文件路径/dm8/data/DAMENG/
  
2、主备库分别初始化实例(按客户要求)
  ./dminit path=/dm8/data page_size=32 instance_name=RAC1
  ./dminit path=/dm8/data page_size=32 instance_name=RAC2

3 备份还原
  # 如果是初始搭建环境,可以通过对主库脱机备份、对备库脱机还原的方式来准备数据, 如果主库已经处于运行状态,则可以对主库进行联机备份、对备库脱机还原的方式来准备数据。
12月19
咱话不多说,正如标题所见,实践开始。

首先打开cmd,win键+r打开运行,输入cmd打开控制台。

在控制台中输入msg / server:IP地址 * "要发送的内容。"   注:(这里的引号要加,且*号左右必须空一格)

例如:我的ipv4地址是192.168.90.1**    注:(用ipconfig命令可查)
分页: 1/66 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]