分类:编程

MySQL 整表加密解决方案 keyring_file

说明 MySql社区版从5.7.11开始支持基于表的数据加密方案,模块名为keyring_file,支持加密整张表。这种是加密方式其实是基于文件加密的,一旦mysqld读取key启动后,将会解密整张表的数据,在mysql服务内,读取的数据都是解密后的,也就是说对客户端而言是无感知的。而这个key是本地存放的,mysql服务拥有读写这个key的权限。 总体看这种方案不太安全,原因是数据库文件是加密的,但只要能有mysql服务的账户,那么访问数据都是解密后的,加密不攻自破。而且解密key也是本地存放的,入侵者完全可以一并带走。这种方案只能保证入侵者只拖走了数据库文件后无法读取内容。 企业版MySQ…

阅读全文 »

常用hibernate注解:表关联,字段属性注解

现在主流的的ORM就属hibernate和mybatis了。两者相比之下,hibernate更加灵活,部分SQL功能可以使用丰富的注解实现,而mybatis一般都是构建原生的SQL实现的。 1.基本注解 实现hibernate的核心应该就属Entity。一个简单的JOPO,我们添加@Entity标注这是一个实体类,默认使用类名作为表名,使用字段名作为列明,一个完整的Entity类的结构就对应一张数据库中的表。 我们使用@Table(name=”newTableName”) 注解自定义表名 使用@Column(name=”newColumnName&#8221…

阅读全文 »

Spring Boot 2.0 & OAuth 2.0 客户端实现

在oauth2.0框架中,主要包含了三个角色,授权端,客户端,资源端。 授权端指的是oauth2.0的授权服务,客户端可能是浏览器,也可能是java服务,资源端是给客户端提供资源服务的. 从流程上看,客户端提供认证信息,从授权服务获取令牌,让拿着令牌到资源服务获取内容,资源服务会拿着客户端给的令牌去授权服务校验令牌的有效性,无问题则返回相应资源。 单论客户端而言,首先需要配置授权必须的配置,比如clientid,clientSecret等。 配置模板如下 client: clientId: spring-security-oauth2-read-client clientSecret: spr…

阅读全文 »

Mybits plugin& Interceptor & jsqlparse 实现多租户

上一篇文章写道了mybatis框架下自定义拦截器的基本实现。因为项目正好要做多租户的功能,所以我用这张方案实现了一下。 原本平台是基于docker实现多租户方案的,这种方案的优点是省时省力,新建一个租户基本没啥操作,一个dockerfile文件搞定,而且现在的服务商都提供了完整的配套容器服务。但缺点也能明显,每个租户都需要分配一套独立的硬件资源。N个租户意味着要开N个容器,N个数据库,N个tomcat,也有点吃不消。 目前来说,多租户大致分三种方案 1.独立数据库 2.同一个数据库,不同Schema 3.同一个数据库,同一个Schema,每张表使用tenant_id字段区分不同的租户。 个人倾…

阅读全文 »

mybatis 实现 SQL 查询拦截修改

拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法。Mybatis拦截器设计的一个初衷就是为了供用户在某些时候可以实现自己的逻辑而不必去动Mybatis固有的逻辑。比如我想针对所有的SQL执行某个固定的操作,针对SQL查询执行安全检查,或者记录相关SQL查询日志等等。 Mybatis为我们提供了一个Interceptor接口,可以实现自定义的拦截器。 public interface Interceptor { Object intercept(Invocation invoca…

阅读全文 »

IDEA+Git 多人协同开发开发 创建纯净功能分支

需求: 现在有一个比较复杂的功能点需要多人协同开发,IDE使用idea,Git服务端使用的是Microsoft Team Foundation Server。现在团队需要对每个人编写的代码进行代码评审。 因为多人使用了同一个功能分支进行开发,所以分支内混合了多人代码,这样很难进行评审。 实现目标: 在使用了混合代码分支开发的情况下(也是不可避免的),但能分离出只包含自己代码的分支作为最终提交代码。 具体操作: 要实现本需求,必须要懂得git的基本操作语法,比如查看提交记录,抽取commit,创建新分支,提交分支到远程服务器等。不过因为idea自带了强大的git插件。 所以我们只需要鼠标点点就可…

阅读全文 »

Mybatis SQL语句编写

1.插入多条数据并获取主键 一个非常简单的插入sql <code>insert into table (aa,bb,cc) values(xx,xx,xx),(yy,yy,yy)<code> 在Mapper中写入对应的sql模板 <insert id=”insertUser” keyProperty=”id” useGeneratedKeys=”id”> insert into xxxx (xx) value (xxx) </insert> 2.批量插入数据 并返回主键 <insert id=”insertBatch” parameterT…

阅读全文 »

Java-Spring-AOP 实现

AOP即面向切面编程,是针对OOP编程编程的不足之处的补充计划。OOP通过引入封装,多态,继承等概念建立一种对象的层次结构,用于模拟公共行为的一个集合。 不过OOP定义的是对象的纵向关系,顶部总是高度抽象化的对象,底部总是具体的实现。但OOP不能适应定义横向的关系。比如日志功能,异常的处理,请求的安全检查等等,这些功能一般都存在散布在各个层次的代码中,又与具体的功能没有什么关联。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP恰恰相反,它是定义了对象的横向关系,剖开对象的内部,讲那些会影响多个类的公共行为封装到单独的模块。这个模块称之为切面,原本分散的代码称之为横切。所…

阅读全文 »

Android Studio&DDMS&IdeaSmali 实现Smali级别的动态调试

所谓的动态调试其实是逆向的一种方式,一般逆向有两种方式,一种是静态分析,就是把dex转换为smali代码,或者dex转化为jar(.class)然后再转化为java代码。smali可以直接回编译而java则不行。 第二种就是动态分析,动态分析基于第一种静态分析获取的smali或者java源码来进行的调试分析。 名词解释: smali是Davlik的寄存器语言,Davlik是android上的jvm实现。反编译出来的smali都是没有语法糖的,所以代码的逻辑可能与源码不太一样,反编译出来的java代码亦然,可以看到很多类似 for(;;) 的语法。Android Studio是谷歌基于社区版In…

阅读全文 »

Xposed那些事儿 — xposed框架的检测和反制

之前看到有人发了关于使用xposed屏蔽抖音检测xposed的思路(https://www.52pojie.cn/thread-684757-1-1.html),贴出了部分伪代码, 但觉抖音写的蛮有意思的,自己对这方面也不是很清楚,毕竟Android我没怎么学习。借这个机会,了解一下。写的不是很清楚,大家多多抱哈啊!~~ 整理了一下文档,我发现抖音主要使用了以下的手段检测xposed。 环境: win10 x64 使用的工具:apkdb & jeb 2.2.7 1.尝试加载xposed的类,如果能加载则表示已经安装了。 XposedHelpers类中存在fieldCache methodCac…

阅读全文 »