正常用了好久的 git 项目突然 pull 命令不好使了,提示如下。这是是因为 git 在 2.27 版本后新增了一个显示的配置式,选择 git 的默认提交合并。
小不的笔记
时间之外的往事
jdk8-method-reference
方法引用
简介
方法引用是一种在 Java 中使用现有方法来创建简洁的 lambda 表达式的方式。它可以让你直接指向现有方法,而无需重新定义方法体。方法引用可以使代码更加简洁、易读,并减少冗余。
Java8 default method
Java8 引入”默认方法”的新特性,它允许开发者不破坏现有的接口实现的前提下给接口添加新的方法。它提供了灵活性,允许接口定义实现并在具体类未提供该方法的实现时使用默认实现。这个特性部分实现了多重继承的功能,在接口的演化和代码复用方面都非常实用。
dorado unkown package
正常部署的 dorado 项目在启动一段时间之后访问会报unkown package [widget]
。因为 dorado 在启动时会把资源文件解压到临时目录里,可能是资源文件被清理掉导致的错误。
Maven 跳过测试 skip test
Java/Shell程序封装为MacOS程序 Application
macOS 下有些带 GUI 的程序并没有按照 macOS 的规范去打包成一个 MacOS 的 Application,导致启动它的体验不太好,虽然不影响使用。 这里以Jadx
-- 一个 Java 反编译工具, 为例演示如何把一个 Java 程序包装为 MacOS 程序 Application。
dorado 接口安全风险
dorado 封装了Ajax请求,导致在权限处理上与传统Web项目还是有很大的区别。dorado下,暴露一个服务可以通过@Expose
、@DataProvider
、@DataResolver
等注解。 比如,我想提供一个接口,参数为name
, 返回值为"Hello " + name
, 我只需要写一个Java方法,同时把类注册到Spring上下文,并在方法上标注@Expose
。
1 |
|
像这样的一个接口,在任何一个dorado页面都可以通过构建一个AjaxAction,并配置service为beanId#方法名的形式 demoController#hello
, 就可以调用这个方法。
1 | new dorado.widget.AjaxAction({ |
dorado封装了HTTP请求,所有的请求统一发给URL /dorado/view-service
,然后由报文内容决定调用哪一个接口。 dorado 的这一特性导致,无法通过拦截URL的方式管理接口的权限,只能通过AOP的方式去拦截方法从而实现接口的管理。每个页面都会提供大量的接口,不同的页面可能会使用相同的接口。会导致接口权限的配置变得特别复杂。 从简化配置的角度,可以通过解析dorado view建立dorado接口与页面的映射,通过判断是否有权限访问接口所在的页面来判断能否访问接口。然后对需要更细粒度管理的接口做一个额外的配置。 基于此思路开发了 dorado exposedservice security https://github.com/cnxobo/dorado-exposedservice-security.git ,以解决dorado接口安全问题。
NUC8 黑果Monterey启动特别慢
NUC8 黑果 Monterey 启动特别慢
三星的某些型号的 SSD,比如我的 970 EVO plus,执行 TRIM 的操作特别的慢。而在 APFS 上,如果启用了 TRIM,macOS 会在启动的时候执行一次 TRIM 操作释放未使用的空间,就会导致启动速度特别的慢。 可以通过升级 OpenCore 到 0.7.9 及以上版本,然后设置SetApfsTrimTimeout
值为 0(默认为-1)关闭启动时的 TRIM 操作以提升启动速度,我的是从启动时间 5 分钟提升到 20s。
macOS 12.0 及以上版本
SetApfsTrimTimeout
超时功能失效只有 0 禁用,及其值开启。
Spring Security 3 升级导致 Request method 'POST' not supported
一个上古项目由于安全原因需要升级依赖,其中Spring 版本需要由3升级到5。完成版本升级之后GET请求的接口都是正常的,POST请求的接口都会报Request method ‘POST’ not supported。
[AbstractHandlerExceptionResolver:199] - Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘POST’ not supported]
在debug跟踪代码,发现请求会在CsrfFilter里被转发到/
然后报错。通过查阅Spring迁移文档3to4发现,Spring Security4开始默认启用Csrf。由于之前项目并不支持Csrf,导致权限框架把请求拦截下来。给项目配置禁用Csrf就可以了。<csrf disabled="true"/>
1 | <http> |
JavaScript Number 四舍五入并保留两位小数
JavaScript 浮点怎么算都算不对。