草庐IT

component-tags

全部标签

java.security.InvalidKeyException: IOException : DER input, Integer tag error关于RSA解密碰见的天坑

项目场景:        安卓开发中手机号一键登入,需要得到本机号码,号码有三大运营商,所以用的时极光平台,帮我们封装好了。客户端通过认证AndroidSDK后获取loginToken给服务端,服务端拿到loginToken调用一键认证Api获取加密的手机号(基于RSA公钥),需要用对应的RSA私钥解密,但出现了java.security.InvalidKeyException:IOException:DERinput,Integertagerror这个问题,意思是私钥格式不对,处理了半天,避免大家踩坑,总结出这篇文章。问题描述对获取到加密的手机号进行解密报的异常,先看官网的解密方案:官方文档

java.security.InvalidKeyException: IOException : DER input, Integer tag error关于RSA解密碰见的天坑

项目场景:        安卓开发中手机号一键登入,需要得到本机号码,号码有三大运营商,所以用的时极光平台,帮我们封装好了。客户端通过认证AndroidSDK后获取loginToken给服务端,服务端拿到loginToken调用一键认证Api获取加密的手机号(基于RSA公钥),需要用对应的RSA私钥解密,但出现了java.security.InvalidKeyException:IOException:DERinput,Integertagerror这个问题,意思是私钥格式不对,处理了半天,避免大家踩坑,总结出这篇文章。问题描述对获取到加密的手机号进行解密报的异常,先看官网的解密方案:官方文档

Git基础 - git tag 一文真正的搞懂git标签的使用

1.什么是tag1.1tag的简单理解tag中文我们可以称它为标签。简单的理解,tag就是对某次commit的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0.100这样的标签来标识里程碑的意义。1.2tag的类型有两种类型的标签:轻量标签(lightweight)、附注标签(annotated)【轻量标签】:只是某个commit的引用,可以理解为是一个commit的别名;【附注标签】:是存储在git仓库中的一个完整对象,包含打标签者的名字、电子邮件地址、日期时间以及其他的标签信息。它是可以被校验的,可以使用GNUPrivacyGuard(G

Git基础 - git tag 一文真正的搞懂git标签的使用

1.什么是tag1.1tag的简单理解tag中文我们可以称它为标签。简单的理解,tag就是对某次commit的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0.100这样的标签来标识里程碑的意义。1.2tag的类型有两种类型的标签:轻量标签(lightweight)、附注标签(annotated)【轻量标签】:只是某个commit的引用,可以理解为是一个commit的别名;【附注标签】:是存储在git仓库中的一个完整对象,包含打标签者的名字、电子邮件地址、日期时间以及其他的标签信息。它是可以被校验的,可以使用GNUPrivacyGuard(G

【一句话】@Configuration和@Component的区别

首先一句话:@Configuration修饰的类会被Cglib动态代理,@Component不会。详细:Cglib动态代理生成当前对象的子类Class,并对方法拦截,多次调用@Bean方法时直接从BeanFactory之中获取,得到同一个对象。实际是因为注解下有个proxyBeanMethods属性,默认值为true,即通过Cglib动态代理生成一个代理子类,对原始方法进行拦截,由BeanFactory处理;如果手动设为false,直接调用@Bean方法和@Autowired拿到的就不是同一个对象了。当然,你直接调用@Bean方法跟直接调用其他方法也没有区别了,相当于你直接调用的时候,没有被代

【一句话】@Configuration和@Component的区别

首先一句话:@Configuration修饰的类会被Cglib动态代理,@Component不会。详细:Cglib动态代理生成当前对象的子类Class,并对方法拦截,多次调用@Bean方法时直接从BeanFactory之中获取,得到同一个对象。实际是因为注解下有个proxyBeanMethods属性,默认值为true,即通过Cglib动态代理生成一个代理子类,对原始方法进行拦截,由BeanFactory处理;如果手动设为false,直接调用@Bean方法和@Autowired拿到的就不是同一个对象了。当然,你直接调用@Bean方法跟直接调用其他方法也没有区别了,相当于你直接调用的时候,没有被代

那些舍不得删除的 MP3--批量修改mp3的ID3tag

整理电脑时发现很多mp3。那是大约2001年至2009年之间。那个时候大家听歌,还是习惯从网上下载mp3。虽然现在听歌比从前方便多了,简单到只需在APP中输入歌名,但用播放器听mp3的感觉是完全不同的……这种感觉可能只有80后能体会吧:D。拷贝到macos后,查看这些mp3的ID3信息是这样的:虽说macos自带的Music.app可以修改ID3信息,但一个个修改太繁琐,不如脚本批量修改来的快。脚本批量更新同一目录下的mp3,如果有传入命令行参数,会覆盖对应的ID3tag。如果没有传参,就批量更新当前目录mp3,将gb2312编码转为utf-8编码。代码已放github

那些舍不得删除的 MP3--批量修改mp3的ID3tag

整理电脑时发现很多mp3。那是大约2001年至2009年之间。那个时候大家听歌,还是习惯从网上下载mp3。虽然现在听歌比从前方便多了,简单到只需在APP中输入歌名,但用播放器听mp3的感觉是完全不同的……这种感觉可能只有80后能体会吧:D。拷贝到macos后,查看这些mp3的ID3信息是这样的:虽说macos自带的Music.app可以修改ID3信息,但一个个修改太繁琐,不如脚本批量修改来的快。脚本批量更新同一目录下的mp3,如果有传入命令行参数,会覆盖对应的ID3tag。如果没有传参,就批量更新当前目录mp3,将gb2312编码转为utf-8编码。代码已放github

@Configuration和@Component

@Configuration注解和@Component注解的区别首先看下@Configuration这个注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic@interfaceConfiguration{ @AliasFor(annotation=Component.class) Stringvalue()default""; booleanproxyBeanMethods()defaulttrue;}可以发现其实@Configuration注解本质上也是一个@Com

@Configuration和@Component

@Configuration注解和@Component注解的区别首先看下@Configuration这个注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic@interfaceConfiguration{ @AliasFor(annotation=Component.class) Stringvalue()default""; booleanproxyBeanMethods()defaulttrue;}可以发现其实@Configuration注解本质上也是一个@Com