2018-06-14 07:24:21

Spring Boot 2.x JPA 不能够添加自定义Repository

升级Spring Boot版本后出现了大量的问题,升级到新版的Spring data JPA 会报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysPostAPI': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysPostServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysPostRepositoryImpl': Injection of resource dependencies failed; nested exception is org.spr

2018-05-23 08:09:31

Mac IDEA+CLION jni Hello World

新建一个空的javaweb-jni项目,并在IDEA添加拓展工具: 添加拓展工具: Program: $JDKPath$/bin/javah Arguments: -jni -classpath $OutputPath$ -d ./jni/ $FileClass$ Working directory: $ProjectFileDir$  新建org.javaweb.jni.Test.java: package org.javaweb.jni; public class Test { static { System.loadLibrary("test"); } private static native String exec(String cmd); public static void main(String[] args) { System.out.println(exec("123")); } } 生成JNI头文件测试: 成功生成的头文件会存放在当前项目根目录下创建jni目录: Clion新建C项目: 复制jni.h和jni_md.h到Clion项目目录(jdk1.8.0_144.jdk换成本地的JDK版本): cd /Library/J

2018-05-08 07:57:18

一个绕Runtime、ProcessBuilder的linux-cmd.jsp

最近有人问怎么绕过ProcessBuilder的exec方法,所以就写了一个可以绕大部分WAF或者说RASP的jsp。原理很简单:直接反射java.lang.UNIXProcess类。 请求:http://localhost:8080/linux-cmd.jsp?str=ls -la Windows版懒得写,会的朋友自己动手稍微改下就可以了。 下载地址:linux-cmd.jsp.zip 再发一个纯Java反射ProcessBuilder类的cmd.jspx,下载地址:cmd.jspx

2018-04-13 08:09:56

Java SpEL、Ognl、MVEL2表达式Hook项目

最近Spring连续两个命令执行,SpEL表达式在Spring的子项目中大量的使用甚至是滥用让人感觉不到安全。昨天写了一个Hook并记录Java表达式语言的项目,可用于观测命令和执行点调用链信息。适当的改改可以直接用于拦截未知的表达式注入漏洞攻击。 git地址:https://github.com/anbai-inc/javaweb-expression 这是一个专门Hook并记录Java表达式语言执行的Agent小程序。逻辑非常简单,适合初学者使用。所有的实现代码逻辑都在:org.javaweb.expression.Agent.java类里面。导入javaweb-expression并构建expression-agent模块。然后在程序运行之前加入以下jvm参数: -noverify -javaagent:/目标路径/expression-agent.jar -Dfile.encoding=UTF-8 如果是Tomcat需要修改catalina.sh或者catalina.bat文件,添加如下配置参数:JAVA_OPTS="-noverify -javaagent:/目标路径/expression-agent.jar 成功插入后控制台(可以根据具体的情况输出到文件或者数据库)会打印出拦截到的表达式和程序调用链。 如: --------------------------

2018-03-16 09:43:51

2018-01-12 06:26:25

AB在线Markdown编辑器

Git地址:https://github.com/anbai-inc/ab-editor 简介 这是一个简单的Markdown在线编辑器,演示项目环境是一个SpringBoot+JPA的maven项目,clone后请修改数据库密码。项目比较简单,调用请参考示例editor.html。前端代码依赖主要markdown-it.js jquery、codemirror、jquery-file-upload。  支持表情包和文件上传(表情包支持自定义表情分组、图片、描述之类的)。  基本配置 创建编辑器时可以指定表情包、文件上传的API地址: var editor = $('#ab_editor_demo').ABEditor({ "url": "./api/ab-editor/upload_json.php", "emoji_api": "./api/ab-editor/emoji.php", "height": 400 }); 当然也可以通过height和width指定编辑器的宽高。 获取编辑器值方式:editor.getValue() HTML渲染markdown方式: var md = markdownit({ htm

2017-12-11 05:53:54

Elasticsearch The number of object passed must be even but was [1]

新版的elasticsearch 在调用setSource的时候传入json字符串、对象后都会爆:The number of object passed must be even but was [1].其实是新版需要传入Map类型。 使用fastjson转换成Map对象 Map data = JSONObject.parseObject((String) doc.get("json"), Map.class); 使用自带的XContentParser XContentParser parser = XContentFactory.xContent(XContentType.JSON). createParser(NamedXContentRegistry.EMPTY, json); 然后在setSource时转换成Map类型: .setSource(parser.map())

2017-11-06 08:20:13

Proxifier Mac和Windows全局代理

有很多时候我们利用ShadowsocksX或者SSH隧道打开代理后发现Mac和windows都无法全流量代理。Proxifier只需要简单的配置就可以支持全局的流量代理。 首先需要利用SSH隧道或者ShadowsocksX先在本地开发一个Socket代理(监听一个用于本机代理的socket端口)。 Mac版本配置 如果要使用mac下的ssh代理隧道,在控制台执行如下命令:ssh -nNTf -D 1080 root@123.123.123.123 (123.123.123.123是你的远程linux服务器地址)。如果用ShadowsocksX直接配置好ss服务器代理就可以了。 点击Proxies添加一个Socket5代理,如图: 设置代理规则(Applications可以选择你想要代理的应用,默认是任何的mac应用): action选择前面配置好的Socket5代理。 Windows版本 Windows版本配置过于简单,启动好ShadowsocksX或者ssh代理后直接添加代理就可以了。 Mac版:Proxifier+for+Mac+2.15.3.dmg (安装密码www.ifunmac.com) Windows汉化版:HA-Proxifier331-LDR.rar

2017-11-06 06:38:18

gitlab迁移遇到的版本不一致和无法导入问题

Gitlab恢复数据时提示备份版本和当前版本不匹配时无法导入? 这个时候需要卸载掉当前服务器安装的gitlab版本,并下载备份时的gitlab版本并重新安装(清华的tuna项目有所有的gitlab版本备份,下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/) 这里需要根据当前的操作系统类型选择e16或者e17,(centos 64bit是e16,centos7是 e17。如果不清楚具体是什么执行uname -a就知道了)。 下载完对应版本的rpm包后直接安装并再次导入备份文件即可。 "gitlab undefined method `full_path'" 遇到这个问题是因为数据库里有一个未删除的仓库记录而备份文件中并不存在此仓库,这时候直接注释掉:/opt/gitlab/embedded/service/gitlab-rails/lib/backup/repository.rb文件的78行: #project.ensure_storage_path_exists 然后执行: gitlab-ctl reconfigure gitlab-ctl restart gitlab-rake gitlab:backup:restore BACKUP=XXXXXX 等待命令执行完成即可成功恢复数据了

2017-04-08 16:18:15

IDEA 由数据库表生成带注释的java实体类代码

Java生成实体类代码有非常多的方案,而且强大的可以生成整个项目的解决方案,不过这里只是讨论实体类的生成。IDEA提供了类似的实体类生成脚本,用起来比较方便简捷。不过需要用IDEA支持的jvm脚本语言开发(默认示例是Clojure、Groovy)。 但是自带的脚本简单到生成的代码都没法用(有bug),所以花了点时间完善了下脚本实现代码,这里简单介绍下如何使用我们的脚本去生成java实体类代码。 连接数据库: 配置数据库连接信息,如果没有下载过jdbc的jar,这里需要点击download 找到IDEA的脚本扩展目录: 在这个脚本目录下新建Generate Entitys.groovy并复制如下代码 Generate Entitys.groovy: import com.intellij.database.model.DasTable import com.intellij.database.model.ObjectKind import com.intellij.database.util.Case import com.intellij.database.util.DasUtil /* * 默认可用的 context 绑定: * SELECTION Iterable* PROJECT project * FILES fi