开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

Java 获得文件的指纹

在文件上传到服务器的时候,我们希望能够获得文件的指纹以确定文件没有被篡改过。 常用的算法最开始使用的是 MD5,随后随着技术的发展,MD5 算法已经被确定是不安全的了。 目前可能使用更多的是 HSA3_256 哈希算法。 哈希算法通常有以下几个特点: 正像快速:原始数据可以快速计算出哈希值 逆向困难:通过哈希值基本不可能推导出原始数据 输入敏感:原始数据只要有一点变动,得到的哈希值差别很大 冲突避免:很难找到不同的原始数据得到相同的哈希值 哈希算法主要有MD4、MD5、SHA。 MD4 1990年 输出128位 (已经不安全) MD5 1991年 输出128位 (已经不安全) SHA-0 1993年 输出160位 (发布之后很快就被NSA撤回,是SHA-1的前身) SHA-1 1995年 输出160位 (已经不安全) SHA-2包括SHA-224、SHA-256、SHA-384,和 SHA-512,分别输出224、256、384、512位。 (目前安全) 在 Java 中,可以使用 Apache 提供的 Apache Commons Codec,非常容易的获得文件的哈希字符串指纹。 方法也非常简单,第一步就是需要将文件读取为 InputStream。 如果自己写的话,可能这一步有点代码。 你可以使用 Apache 提供的 FileUtils.openInputStream 就可以直接将文件读取为 InputStream 了。 考察下面的代码: InputStream is = FileUtils.openInputStream(new File(SCOConstants.PATH_DATA_EXCHANGE + "Estimated vs Original Manual (JIRA) 10-23-20.csv")); MD5 哈希     在文件读取后,你只需要使用 Apache Commons Codec 提供的 DigestUtils 方法就可以了。 /** * Test to get file's MD5 Hash * * @throws Exception */ @Test public void fileMD5Test() throws Exception { String md5 = StringUtils.EMPTY; try { InputStream is = FileUtils.openInputStream(new File(SCOConstants.PATH_DATA_EXCHANGE + "Estimated vs Original Manual (JIRA) 10-23-20.csv")); md5 = DigestUtils.md5Hex(is); } catch (Exception e) { e.printStackTrace(); } logger.debug("MD5 for File: {}", md5); } 上面的代码就可以直接获得 InputStream 的 MD5 哈希。 程序的输出为: 09:32:31.522 [main] DEBUG c.i.s.c.t.utilities.CodecUtilsTest - MD5 for File: 1ec6473fc1bd50a982767f555734af64 SHA3 256 与 MD5 哈希算法是一致的。       你需要首先也将文件读取为 InputStream ,然后使用 Apache 提供的 DigestUtils.sha3_256Hex(is); 就可以了。 考察下面的代码: /** * Test to get file's SHA3_256Hex Hash * * @throws Exception */ @Test public void fileSHA3_256HexTest() throws Exception { String sha3Hex256 = StringUtils.EMPTY; try { InputStream is = FileUtils.openInputStream(new File(SCOConstants.PATH_DATA_EXCHANGE + "Estimated vs Original Manual (JIRA) 10-23-20.csv")); sha3Hex256 = DigestUtils.sha3_256Hex(is); } catch (Exception e) { e.printStackTrace(); } logger.debug("SHA3_256Hex for File: {}", sha3Hex256); } 运行程序的输出为: 09:35:48.093 [main] DEBUG c.i.s.c.t.utilities.CodecUtilsTest - SHA3_256Hex for File: https://www.ossez.com/t/java/615

2020年10月27日 0Comments 956Browse 0Like Read more
Computer Science

Spring Could not find unique TaskExecutor bean 错误

这个错误其实是 debug 级别的错误,是不影响运行的。 错误栈为: 020-10-26 15:27:57.726 DEBUG 12844 --- [nio-8080-exec-1] .s.a.AnnotationAsyncExecutionInterceptor : Could not find unique TaskExecutor bean org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.core.task.TaskExecutor' available: expected single matching bean but found 2: applicationTaskExecutor,taskScheduler at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1200) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:420) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:350) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.getDefaultExecutor(AsyncExecutionAspectSupport.java:233) at org.springframework.aop.interceptor.AsyncExecutionInterceptor.getDefaultExecutor(AsyncExecutionInterceptor.java:157) at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.lambda$configure$2(AsyncExecutionAspectSupport.java:119) 原因和解决 简单来说就是在你的 @Configuration 中必须要实现一个 AsyncConfigurer 来为 @Async 指定一个 TaskExecutor 执行的方法。 package com.insight.sco.service.config; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import java.util.concurrent.Executor; /** * AsyncConfigurer for Spring * * @author YuCheng Hu */ @Configuration @Component @EnableAsync public class TaskExecutorConfig implements AsyncConfigurer{ /** * Override Config * * @return */ @Override public Executor getAsyncExecutor(){ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(10); taskExecutor.setMaxPoolSize(80); taskExecutor.setQueueCapacity(100); taskExecutor.initialize(); return taskExecutor; } } 可以将上面的方法拷贝放到你 Spring 的项目中,这样你的 Spring 项目就可以告诉应用的上下文使用哪一个异步方法。     https://www.ossez.com/t/spring-could-not-find-unique-taskexecutor-bean/614  

2020年10月27日 0Comments 1078Browse 0Like Read more
Computer Science

微信小商店的登录路径

要登录你的小商店,前提是你的小商店已经开店成功了。 在开店成功后,你可用有下面 2 个登录路径: 小商店网页 你可以通过小商店的专有网页地址进行登录。 访问下面的地址:https://shop.weixin.qq.com/ 扫码后登录即可。 微信公众平台 你也可以通过微信公众平台进行登录。 登录访问的地址为:https://mp.weixin.qq.com/ 访问上面的微信公众平台后,用你已经注册的小程序微信号登录即可。 微信公众平台登录界面。 https://www.ossez.com/t/topic/613  

2020年10月25日 0Comments 1385Browse 0Like Read more
Computer Science

微信小商店的开店路径

可能是微信小商店很多时候还在内测阶段。 登录路径也不是非常明显,包括如何注册也是信息是否混乱。 经过一整折腾,后来发现其实有 2 个路径可以去做。 微信直接开店 在登录微信后,直接搜索小程序【小商店助手】 点进去就可以看到需要的界面了。如果你需要开店的话,你需要你的身份证号码等信息。 注册成功后就可以直接开店了。 通过网页 相信这个是很多人希望找到的链接了。 小商店的链接地址为:https://shop.weixin.qq.com/ 不管你有没有注册过,你可以用你的微信号直接扫码。 如果你已经开店成功了,网页界面会让你登录,然后进行相关的设置和分类等。 分类的设置是必须在网页中做的。 如果还没有设置过开店的话,会提示你在手机上设置开店。 与开始你在手机上搜索小商店助手开店的界面是一样的。 https://www.ossez.com/t/topic/612

2020年10月25日 0Comments 789Browse 0Like Read more
Computer Science

Postman 测试 API 如何上传文件

很多时候我们都会用 Postman 来测试 API。 在最开始的时候,我们都会使用字符串呀什么的来进行测试,随着 API 的继续开发,我们希望通过 API 来上传文件。 如何在 Postman 中进行设置来上传文件? 设置方法 Postman 已经帮我们想到了。 在进入 Postman 以后,找到你需要进行测试的 API,然后选择 body。 在 Body 下面选择文件,然后输入 key 就可以了。 其实主要开始很多人不知道怎么设置的原因是,你需要将鼠标移动到后面,然后在下拉框中选择文件。 key,输入你的名字,一般来说我们都会选择 file,这个需要和后台 API 的进行匹配的。 https://www.ossez.com/t/postman-api/610

2020年10月23日 0Comments 659Browse 0Like Read more
Computer Science

Spring Boot 项目上传日志到 Azure Application Insights

Azure 提供了一个 Application Insights 工具。 这个工具可以对 Spring Boot 项目中的 API 请求,日志进行分析。 你需要做的就是在你的 Spring Boot 项目中配置好依赖和参数后,Spring Boot 项目启动后就会自动将日志上传到 Azure 供分析。 配置 Azure   不管怎么用,Azure 都首先需要进行配置。 我们现在针对配置的是日志删除到 Azure 上进行日志分析。 Log Analytics workspaces 我们首先需要配置一个 Log Analytics workspaces,搜索资源 Log Analytics workspaces。       在弹出的界面中将会显示已经配置好的日志分析工作空间。 如果你还没有的话,你需要创建一个。 单击界面上的 Add 按钮,进行新建。       在新建的对话框中你需要对你的费用订购部分进行配置。 如果你还没有配置的话,你可能需要到 Azure 的控制台中配置信用卡。 在第二部分输入的是名称和区域,名称可以根据需要命名,区域的话,选一个离你最近的就可以了。       在配置完上面的参数后,创建就可以了。 Application Insights 在最上面的搜索框中搜索 Application Insights 然后你会看到 Application Insights 的界面,单击左侧的添加按钮来添加一个应用。       这里也有几个配置,在最上面的是费用计算和订购。 中间的部分是有关资源的名称。 在最下面的就是有关日志的配置了,因为要在这里进行选择,这就是为什么我们需要首先配置日志工作空间的原因,否则是没有办法配置日志的。       在一切配置妥当后,单击最下面的预览并创建即可。 在创建成功后,你的项目会获得一个 Instrumentation Key,这个是需要配置到你 Spring Boot 项目中的。 现在你可以先拷贝下来。       Spring 项目 在Spring 项目中需要进行一些调整就可以了。 maven 依赖 你需要为你的项目添加 Maven 依赖。 <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-logging-logback</artifactId> <version>2.6.2</version> </dependency> 上面的依赖将会将日志上传需要的类添加进来。 application.properties 在 Spring Boot 配置文件中,添加下面的参数 # Azure Application Insights azure.application-insights.instrumentation-key=[开始让你拷贝的 ID] spring.application.name=[Azure 中定义的名称] 根据上面在 Azure 的配置,将上面的参数修改为你的 Azure 配置。 logback.xml 因为我们的项目使用的是 logback 为日志,因此我们需要在 logback.xml 中添加下面的内容。 <appender name="aiAppender" class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender"> <instrumentationKey>[开始让你拷贝的 ID]</instrumentationKey> </appender> <!-- APPENDER-REF --> <root level="debug"> <appender-ref ref="aiAppender"/> </root> 上面的内容非常简单,就是将日志级别为 debug 的全部输出到 Azure 上面去。 在官方的代码中,这里使用了日志级别为 TRACE,我们不建议使用。因为这样会输出非常多的日志,让你的访问非常缓慢。 查看结果 当所有配置完成以后,开始在你的本地运行你的 Spring Boot 应用程序。 稍等一些时间后登录 Azure,然后选择 Transaction search。 在界面中你可能看不到任何数据,你需要单击界面中的显示所有 24 小时内的数据。       如果你能看到程序删除的日志,主要是查看时间,那么就说明一切都已经配置好了。     https://www.ossez.com/t/spring-boot-azure-application-insights/609

2020年10月23日 0Comments 723Browse 0Like Read more
Computer Science

Spring Boot 和 Hibernate 的 H2 数据库配置来进行启动测试

希望在 Spring Boot 中配置 H2 数据库来进行功能测试。 如何进行配置能来让启动的时候自动载入数据和进行测试? Maven 依赖 如果你的 Spring 项目中没有添加 H2 的依赖,你需要在 Maven 中添加。 使用的参数为: <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> </dependency> 配置 application.properties 在 Spring 配置文件中进行一些配置能够在 Spring Boot 中载入数据并且进行调用。 我们可以使用下面的一些配置: spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.datasource.driverClassName=org.h2.Driver spring.datasource.url=jdbc:h2:mem:scodb;DB_CLOSE_ON_EXIT=FALSE spring.datasource.username=sa spring.datasource.schema=classpath:db/schema.sql 配置和参数的说明。 spring.h2.console.enabled 在 Spring Boot 后启用控制台,用户可以通过 Web 界面来访问 H2 的控制台。 spring.h2.console.path 网页界面中通过 URL 可以访问控制台的地址,这个地址可以自由和任意修改。 spring.datasource.driverClassName H2 的 JDBC 驱动名称,你需要配置这个才能够通过 JDBC 访问启动后的 H2 数据库。 spring.datasource.url Spring 项目中数据源的连接参数,在这个参数中你定义了一个数据库的名称为 scodb,在通过网页界面进行访问的时候,会提醒你输入连接参数。 在输入连接参数的时候,你需要输入和上面连接参数一致的配置。 spring.datasource.username 访问数据库的用户名,你可以输入任何名称,在通过网页访问的时候,你需要输入的用户名为这个。 如果你不指定密码参数的话,那么密码就为空。 spring.datasource.schema Spring 启动的时候需要载入的 sql 文件。这个文件将会在 Spring 启动后被执行,创建数据库表和插入测试数据等。 Hibernate 参数配置 假设我们的 Hibernate 使用的是 HikariCP 连接池。 我们需要为你的 Hibernate 配置以下的连接参数。 hibernate.properties 文件 hibernate.connection.driver_class=org.h2.Driver hibernate.connection.url=jdbc:h2:mem:scodb;DB_CLOSE_ON_EXIT=FALSE hibernate.hikari.dataSource.user=sa hibernate.dialect = org.hibernate.dialect.H2Dialect 上面的连接参数为Hibernate 需要的,你需要先进行配置,才能让 HikariCP 连接池获得数据源。 hibernate.cfg.xml Hibernate 配置参数 通过下面的配置来对 Hibernate 的连接池参数进行配置。 <property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider </property> <property name="hibernate.hikari.minimumIdle">5</property> <property name="hibernate.hikari.maximumPoolSize">10</property> <property name="hibernate.hikari.idleTimeout">30000</property> 首先你需要提供连接池的 类。 hibernate.hikari.minimumIdle 这个配置参数连接池中保持的最少的连接数。 hibernate.hikari.maximumPoolSize 连接池中保持最多的连接数 hibernate.hikari.idleTimeout 在连接池中一个连接允许最长被限制的时间。 如果一切顺利,当你启动 Spring Boot 的时候,你应该能够在控制台上看到连接池中的连接保持情况。 https://www.ossez.com/t/spring-boot-hibernate-h2/608

2020年10月23日 0Comments 924Browse 0Like Read more
Computer Science

Spring 配置的 H2 控制台 frameOptions 导致无法访问

Spring H2 控制台访问登录以后的内容无法显示。 访问的时候会看到下面的情况。     解决办法 这个主要是 Spring 安全设置的问题。 在 Spring 中的 frameOptions 配置为 iframe 的安全配置。 X-Frame-Options 头主要是为了防止站点被别人劫持,所以 iframe 将会在 Spring Security 中默认是拒绝设置的。以防止点击劫持攻击。 要修改这个配置,你可以在 Spring 安全配置中进行下面的配置: httpSecurity.headers().frameOptions().disable(); 上面的选项是完全允许 iframe 。 或者你也可以配置下面: httpSecurity.headers().frameOptions().sameOrigin(); X-Frame-Options 有三个值: DENY 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。 ALLOW-FROM uri 表示该页面可以在指定来源的 frame 中展示。     因为我们的控制台配置的是 localhost, 因此我们可以使用 sameOrigin(),因此产生的效果是一样。 https://www.ossez.com/t/spring-h2-frameoptions/607

2020年10月23日 0Comments 901Browse 0Like Read more
Computer Science

H2 数据库插入时间的方法

如果希望向 H2 中插入时间,你可以使用下面的方法插入: ('CWIKIUS.CN', 'client-name-01.csv', '65', 'NEW','2020-10-22 12:47:52.690', CURRENT_TIMESTAMP()), 需要注意的是,上面有 2 个字符串。 如果你希望插入字符串定义的时间。你需要的格式: '2020-10-22 12:47:52.690' 如果你希望插入当前的时间,你可以用时间函数 CURRENT_TIMESTAMP()     上面的时间函数,将会向数据库表中插入当前的时间。 https://www.ossez.com/t/h2/606

2020年10月23日 0Comments 634Browse 0Like Read more
Computer Science

Spring 数据初始 H2 后进行数据查询提示 Schema not found 错误

在运行测试的错误有提示下面的错误: Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "DBO" not found; SQL statement: select myscofile0_.id as id1_1_0_, myscofile0_.dateC as datec2_1_0_, myscofile0_.dateM as datem3_1_0_, myscofile0_.uuid as uuid4_1_0_, myscofile0_.client_id as client_i5_1_0_, myscofile0_.file_name as file_nam6_1_0_, myscofile0_.file_row_count as file_row7_1_0_, myscofile0_.file_status as file_sta8_1_0_ from dbo.MYSCOFILE myscofile0_ where myscofile0_.id=? [90079-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.Parser.readTableFilter(Parser.java:1940) at org.h2.command.Parser.parseSelectFromPart(Parser.java:2827) 问题和解决 出现上面的问题是在 JPA 实例的时候配置了 schema = "dbo, 但是 H2 数据库进行初始化的时候没有创建 schema。     针对上面的问题,你需要在你的 H2 初始化的时候创建一个 schema。 创建 schema 的脚本为: CREATE SCHEMA IF NOT EXISTS DBO; SET SCHEMA DBO; 通过添加下面的脚本,将会在 H2 中创建 Schema,然后可以通过控制台中查看创建的情况。     在完成上面的配置后,再重新运行你的测试,你就会看到上面的错误已经没有错误了。 https://www.ossez.com/t/spring-h2-schema-not-found/605

2020年10月22日 0Comments 943Browse 0Like Read more
12345…7
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (511)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1