使用了lombok后如何生成正确源码包
使用lombok后,如果没有任何配置,则打包的源码与实际class文件是不符合的,此时打开源码IDEA会提示Library source does not match the bytecode for class,而解决该问题也很简单,只需要pom中增加如下配置即可,打包时指定maven参数-Prelease
即可生成正确的源码包:
使用lombok后,如果没有任何配置,则打包的源码与实际class文件是不符合的,此时打开源码IDEA会提示Library source does not match the bytecode for class,而解决该问题也很简单,只需要pom中增加如下配置即可,打包时指定maven参数-Prelease
即可生成正确的源码包:
在实际开发中,总会遇到程序启动不起来或者运行结果不符合期望的情况,如果是在本地,直接debug就行了,几乎人人都会,但是如果到了远程,大多数情况下我们可以看日志,通过日志排查定位到问题,但是如果你的日志不多,或者日志中看不出问题,此时情况就比较难以处理了,而实际上我们仍然可以通过debug的形式来解决,只不过由原来的本地在ide中通过GUI来debug变为通过命令行来debug;
阅读全文k8s现在已经是容器编排领域的事实标准了,而在我们部署k8s集群时,ingress组件是必不可少的,在k8s领域,做的比较好的ingress组件就是traefik了,原生支持k8s,配置简单,上手极快,下面我们就来讲讲如何部署traefik并开启https支持;
阅读全文背景:MySQL 8.0数据库;
最近在做一个小框架,因为本身比较精简,就没有引入太多依赖,直接用了JDBC来操作数据库,因为我的表中有一个datetime
类型的字段,对应的Java代码中使用的是java.time.LocalDateTime
,在处理这个日期字段的时候,就遇到了一个有趣的问题;
在我的数据库表建好后,在Java中使用JDBC原生API实现了一个repository,包含一些数据库的操作,因为代码中有java.time.LocalDateTime
字段,在使用java.sql.PreparedStatement
的时候不确认java.sql.PreparedStatement.setObject(int, java.lang.Object)
方法接收java.time.LocalDateTime
类型的入参后是否可以正确处理,就写了一小段测试用例来测试,核心代码如下:
preparedStatement.setObject(1, LocalDateTime.now());
一行简单的JDBC调用设置参数,参数类型是LocalDateTime,最终发现没有报错,如果一切OK,那么事情到这里就结束了,但是…….
阅读全文2 Factor Authentication简称2FA,双因子认证是一种安全密码验证方式。区别于传统的密码验证,由于传统的密码验证是由一组静态信息组成,如:字符、图像、手势等,很容易被获取,相对不安全。2FA是基于时间、历史长度、实物(信用卡、SMS手机、令牌、指纹)等自然变量结合一定的加密算法组合出一组动态密码,一般每60秒刷新一次。不容易被获取和破解,相对安全。
TOTP/HOTP作为其中的一种(实际是两种,不过其中一个是变种,这里当作一种)算法,目前已经用于大多数网站,例如GitHub、阿里云等;
阅读全文提供一种方法来检查通过不可靠介质传输或存储在不可靠介质中的信息的完整性是开放计算和通信领域的首要必要条件,例如在广域网上传输数据,就可以认为是通过不可靠介质传输数据,因为在广域网上我们的数据要经过N多个不可控节点,任意一个节点都可能修改我们的数据或者丢弃我们数据的一部分,当我们接到消息后需要使用某种方法检查信息的完整性;
基于密钥提供这种完整性检查的机制通常称为 message authentication codes(MAC)
;通常,MAC
在共享密钥的两方之间使用,以验证在两方之间传输的数据,本文中,我们提出一种基于加密 hash
的MAC
机制,我们称之为HMAC
,而这就是本文要介绍的HMAC(Keyed-Hashing for Message Authentication)
算法;
PS:单纯的MD5、SHA1、SHA256等摘要算法仅仅能在可靠渠道上用来消息是完整的,例如某个软件官方发布了他们的安装包的SHA256摘要值,这是一个可靠的渠道,然后我们基于这个从可靠渠道获取到的摘要可以来校验我们从不可靠渠道上获取到的该软件的安装包是否是完整的,而如果我们获取摘要的渠道也是不可靠的时候,普通摘要算法就无法使用了,因为摘要本身可能也会被破坏、篡改,而HMAC算法则能应对这种情况;该算法在TLS的握手流程中有使用;
HMAC
算法可以与任何迭代的hash算法组合使用,例如MD5
、SHA1
,HMAC
还使用一个密钥来计算和验证消息的认证值,采用这种构造的原因:
SHA1算法作为摘要算法的一种,被使用于各种签名、摘要等场景,本章我们详细分析下SHA1算法细节;
0-2^32-1
之间的数字;对于待摘要的消息M,先填充一个 bit 1
,然后填充N个 bit 0
,最后填充 64bit
的消息M的长度信息(单位bit),最终需要满足以下条件:
阅读全文本文旨在介绍一些JDK17的新特性,同时限于篇幅,本文仅列举其中一些差异,而不是全部差异;
PS: JDK17是Java的一个LTS版本(长期支持版本),可以放心迁移过来;
作者:JoeKerouac
最近有个需求,需要加载jar包中的jar包中的class,此时有两种方式:
最终我们决定使用第二种方案(解压可能会导致我们的环境污染,多出来许多文件),即不解压缩jar包,而这就需要我们深入了解jar包的格式,由于jar包就是ZIP格式的,所以要实现该功能必须得了解ZIP格式,这样才能从中抽取我们需要的数据;
阅读全文在第二篇中,我们讲到可以用ARP欺骗的形式将局域网内某个主机的流量转发到我们的机器上,那我们如何对该流量进行拦截修改呢?在Linux下,我们可以 使用netfilter框架来实现对ip数据拦截修改;
阅读全文Jarslink 在4月初推出了新版本,增加支持Spring注解和模块多版本特性。欢迎参与开源项目,成为我们的Commiter。
新版本加入了注解的支持,用户只需要在构建ModuleConfig的时候调用ModuleConfig.addScanPackage(String)方法即可,可以多次调用该方法来添加多个扫描包配置,该配置会被spring用来作为扫描包配置。