-
微信打开链接提示错误
今天微信打开一个链接是提示:```该地址含有无法正确解析的链接格式,请确认是否继续访问。```这个提示开始一头蒙逼,开始我还以为是地址太长,但是后来发现并不是这个问题。于是乎我就一段一段的删除发现,原来链接里面出现了`javascript`这个关键字,例如:`https://www.acgist.com/?w=javascript`还有一个问题就是如果出现了`localhost`关键字,那么页面打开是空白的,例如:`https://www.acgist.com/?w=localhost`
微信 -
Linux运行JavaFX程序
Windows上面直接使用Maven的依赖就可以直接运行,但是Linux上面却不行。下载JavaFX运行环境:[https://gluonhq.com/products/javafx/](https://gluonhq.com/products/javafx/)配置环境变量:```exportJAVAFX=/home/javafx-sdk-11.0.2/lib```运行启动命令:```java--module-path$JAVAFX--add-modulesjavafx.fxml,javafx.controls-jarsnail.jar```>参考文章:[https://openjfx.io/openjfx-docs/#install-javafx](https://openjfx.io/openjfx-docs/#install-javafx)后来我发现了一个更好的解决方案,就是`pom.xml`的配置也可以解决。在Window上面只需要配置`fxml/controls`就可以了,其他的会自动引入:```xmlorg.openjfxjavafx-fxml${javafx.version}${os.na...
Linux JavaFX -
通过UPNP实现内网端口映射
最近在写一个下载软件,HTTP和FTP实现起来比较简单,通过JDK自带的包就能实现。但是P2P的下载实现起来确实比较麻烦,要实现的东西比较多。由于P2P需要本机的端口被外网访问,所以这里就需要用到这个端口映射的技术。首先我们需要使用`M-SEARCH`来扫描内网里面的设备和服务。`M-SEARCH`这个是`SSDP`协议里面的一个请求方法,使用的是`HTTPU`协议,其实和`HTTP`协议很像,只不过是用的`UDP`实现的一个多播请求,只有请求头,没有`body`:```M-SEARCH*HTTP/1.1HOST:239.255.255.250:1900MX:2ST:urn:schemas-upnp-org:device:InternetGatewayDevice:1MAN:"ssdp:discover"```上面的请求头除了`MX`都是固定的。然后就能收到一个响应,响应头里面有个`location`,访问这个地址获取一个`XML`。然后找到`urn:schemas-upnp-org:service:WANIPConnection:1`这个服务,访问对应的`SCPDURL`,可以得到类似WebService里...
UPNP SSDP -
MFC设置软件详细信息
右键查看默认生成的`exe`详细信息时,里面是没有任何信息的,那么启动后我们在资源管理器里面看到的信息就是`xxxx.exe`。怎么设置这个信息呢,其实非常简单,我们在`VS`里面添加资源,选择最后的`Version`里面就可以编辑生成的`exe`的信息了。
MFC -
Java B编码解析
最近在做一个下载软件,研究了一下Torrent文件的解析,这个主要使用的就是B编码,下面就是解析代码:```javapackagecom.acgist.snail.system.bencode;importjava.io.ByteArrayInputStream;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importcom.acgist.snail.system.config.SystemConfig;importcom.acgist.snail.system.exception.ArgumentException;importcom.acgist.snail.system.exception.PacketSizeException;importcom.acgist.snail.utils...
Java B编码 种子解析 -
logback启动日志不能关闭
使用logback设置了`debug=false`,但是依旧在控制台有一段logback本身的日志信息输出:```15:03:22,532|-INFOinch.qos.logback.classic.LoggerContext[Snail]-CouldNOTfindresource[logback-test.xml]15:03:22,533|-INFOinch.qos.logback.classic.LoggerContext[Snail]-CouldNOTfindresource[logback.groovy]15:03:22,534|-INFOinch.qos.logback.classic.LoggerContext[Snail]-Foundresource[logback.xml]at[file:/E:/GITEE/snail/target/classes/logback.xml]15:03:22,610|-INFOinch.qos.logback.classic.joran.action.ConfigurationAction-debugattributenotset15:03:22,612|-IN...
logback -
JavaFX隐藏托盘后不能再次显示
用JavaFX写了个桌面应用,发现隐藏到托盘后不能最大化了,后来发现少了这句:```javaPlatform.setImplicitExit(false);```如果少了这个,那么缩小到托盘后默认是退出了JavaFX平台了,所以要设置这个。
Java JavaFX -
Java读取Torrent文件信息
Torrent文件其实是特殊编码格式的文件,代码包含读取文件信息:名称、大小、发布者、Tracker等。代码地址:[https://gitee.com/acgist/snail](https://gitee.com/acgist/snail)测试代码:[https://gitee.com/acgist/snail/blob/master/snail/src/test/java/com/acgist/snail/pojo/bean/TorrentTest.java](https://gitee.com/acgist/snail/blob/master/snail/src/test/java/com/acgist/snail/pojo/bean/TorrentTest.java)
Java Torrent 种子文件 -
JavaFX TreeView异常
```3月01,201911:42:26上午javafx.scene.CssStyleHelpercalculateValue警告:Couldnotresolve'-fx-text-background-color'whileresolvinglookupsfor'-fx-text-fill'fromrule'*.check-box'instylesheetjar:file:///C:/Users/28954/.m2/repository/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2-win.jar!/com/sun/javafx/scene/control/skin/modena/modena.bss3月01,201911:42:26上午javafx.scene.CssStyleHelpercalculateValue警告:Couldnotresolve'-fx-text-background-color'whileresolvinglookupsfor'-fx-text-fill'fromrule'*.check-box'instyle...
JavaFX -
Spring Boot AWT异常
```java.awt.HeadlessException:nullatjava.desktop/java.awt.TrayIcon.(TrayIcon.java:142)atjava.desktop/java.awt.TrayIcon.(TrayIcon.java:169)atjava.desktop/java.awt.TrayIcon.(TrayIcon.java:198)atacgist.killer/com.acgist.killer.window.menu.TrayMenu.enableTray(TrayMenu.java:137)atacgist.killer/com.acgist.killer.window.menu.TrayMenu.(TrayMenu.java:49)atacgist.killer/com.acgist.killer.window.menu.TrayMenu.getInstance(TrayMenu.java:41)atacgist.killer/com.acgist.killer.window.main.MainWindow.enableTray(MainWindow.ja...
Spring Boot AWT -
京东联盟签名算法
京东联盟(`union.jd.com`)的开放平台(`union.jd.com/openplatform`)的API是不需要授权的,所以可以不用获取`Accesstoken`直接使用。平台提供的SDK不支持Java11,所以只能自己反编译得到签名算法:```javaprivateStringsign(Mapdata){StringBuilderbuilder=newStringBuilder(secretkey);for(Map.Entryentry:data.entrySet()){Stringname=(String)entry.getKey();Stringvalue=(String)entry.getValue();if(StringUtils.isNotEmpty(name)&&StringUtils.isNotEmpty(value)){builder.append(name).append(value);}}builder.append(secretkey);returnDigestUtils.md5Hex(builder.toString()).toUpperCase();}`...
京东联盟 签名算法 -
Hadoop 50070端口打不开
昨天重装了Win10系统,然后发现虚拟机的备份直接拷出来是没有效果的,然后重装了我的Hadoop集群后,发现50070端口不能访问。后来发现原来需要初始化数据节点:```hadoopnamenode-formathadoopdatanode-format```执行之后重启就OK了。
Hadoop -
Sprak streaming问题总结
如果是缺少class:```18/12/1116:24:29ERRORExecutor:Exceptionintask0.0instage0.0(TID0)java.lang.ClassNotFoundException:org.apache.spark.streaming.kafka010.KafkaRDDPartitionatjava.net.URLClassLoader.findClass(URLClassLoader.java:381)atjava.lang.ClassLoader.loadClass(ClassLoader.java:424)atjava.lang.ClassLoader.loadClass(ClassLoader.java:357)atjava.lang.Class.forName0(NativeMethod)atjava.lang.Class.forName(Class.java:348)```设置`conf.setJars`,注意这里需要将jar放入到集群能够访问的地方,例如:`hdfs`:```conf.setJars(newString[]{"hdfs://master:9...
Spark Streaming kafka -
Sprak集群无法访问driver问题
在学习Spark中,遇到一个问题:```SparkExecutorCommand:"/home/jdk-11.0.1/bin/java""-cp""/home/spark-2.4.0-bin-hadoop2.7/conf/:/home/spark-2.4.0-bin-hadoop2.7/jars/*:/home/hadoop-2.7.7/etc/hadoop/""-Xmx1024M""-Dspark.driver.port=55368""org.apache.spark.executor.CoarseGrainedExecutorBackend""--driver-url""spark://CoarseGrainedScheduler@windows10.microdone.cn:55368""--executor-id""8""--hostname""192.168.1.224""--cores""2""--app-id""app-20181211160614-0006""--worker-url""spark://Worker@192.168.1.224:45243"===================...
Spark -
Spring Boot Redis Session问题
使用`redis`来共享`session`,其中容易出现一个问题就是:如果两个不同的项目选择了同一个`redis`数据库,如果`session`里面保存了不同的Java对象,反序列化就会出现`ClassNotFoundException`这个异常。解决办法有两种:1.使用不同的`session`数据库。2.使用不同的`cookie`名称。不过第一种,能解决`ClassNotFoundException`问题,但是由于`session`名称是一样的,那么就导致两个项目只能登陆一个,而不能同时登陆。
Spring Boot Redis Session -
Spring Boot使用redis
添加依赖:```xmlorg.springframework.bootspring-boot-starter-data-redis```redis配置:```spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.database=0```如果我们不添加`redis`配置,默认提供的是一个`RedisTemplate`工具,我们可以自己实现一个配置:```javapackagecom.api.core.config;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redi...
Spring Boot Spring Cloud redis -
Srping Boot使用redis缓存
引入依赖:```xmlorg.springframework.bootspring-boot-starter-data-redis```redis配置:```spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.database=0```然后配置缓存`CacheManager`:```javapackagecom.api.core.config;importjava.time.Duration;importjava.util.HashMap;importjava.util.HashSet;importjava.util.Map;importjava.util.Set;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.cache.CacheManager;importorg.springframework.cache.interceptor.KeyGenerator;importorg.springframework.cache.int...
Spring Boot Spring Cloud redis -
Spring Cloud监控页面打不开
之前没有使用`rabbit`来收集熔断器的信息时,没有问题,后来整合以后,发现了一个问题就是`zipkin`和`hystrix`页面一直打不开,看了一下控制台发现资源文件一直处于加载中。仔细一看请求返回的类型居然是:`text/event-stream`。然后访问了一下映射端点`/actuator/mappings`,发现映射的`controller`为`TurbineController`。下面是源码:```java@RestControllerpublicclassTurbineController{privatestaticfinalLoglog=LogFactory.getLog(TurbineController.class);privatefinalFluxflux;publicTurbineController(PublishSubject>hystrixSubject){Observable>stream=StreamAggregator.aggregateGroupedStreams(hystrixSubject.groupBy(data->InstanceKey.crea...
Spring Cloud Turbine -
CSRF CORS学习
##CORS说到跨域,我想很多程序员都遇到过。跨域简单来说就是在一个页面上发起一个请求,这个请求的域名、端口或者协议不同时就会出现跨域问题。常见的加载静态资源的标签浏览器默认允许跨域(HTTP协议页面不能加载HTTPS的资源):script、link、iframe、img。ajax请求会严格的审核跨域信息。##CSRF跨站攻击,这个东西,说简单一点就是网站A直接跳转到网站B,对于用户浏览器来说,跳转过去时会携带用户在网站B上面的cookie、session等信息,这样可以达到用户在B网站操作的效果。比如:添加购物车、支付等。这个解决办法:1.验证请求发起页面。2.对于请求添加一个token验证。如果以前网站,设置了运行跨域请求,同时运行携带验证信息,那么可能就会出现,如果用户浏览器存在网站B的登陆信息,网站A,可以不用跳转到网站B,直接使用ajax就可以实现用户在网站B上面进行操作。还有一个叫做XSS攻击,这个就是跨站脚本,常见比如BBS,用户提交帖子里面含有一段JS代码,其他用户浏览时就会执行这个JS代码。解决办法过滤掉这些代码即可。
CSRF CORS XSS -
Spring Cloud发送POST请求时提示403
引入了`spring-boot-starter-security`依赖后,配置了通过所有请求,GET请求正常,但是POST请求被拦截,提示`403`。这时需要添加`.csrf().disable()`这段代码,来禁用`csrf`拦截:```java@Overrideprotectedvoidconfigure(HttpSecuritysecurity)throwsException{security.csrf().disable()//解决POST请求403错误.authorizeRequests()//.requestMatchers(EndpointRequest.toAnyEndpoint()).denyAll()//.requestMatchers(EndpointRequest.toAnyEndpoint()).access("hasIpAddress('0:0::/112')orhasIpAddress('192.168.1.0/24')")//.antMatchers("/actuator/**").denyAll()//.antMatchers("/actuator/**").access("...
Spring Cloud Security