MyBatis

WEB攻击手段及防御第2篇-SQL注入

天涯浪子 提交于 2020-08-13 00:13:05
概念 SQL注入即通过WEB表单域插入非法SQL命令,当服务器端构造SQL时采用拼接形式,非法SQL与正常SQL一并构造并在数据库中执行。 简单的SQL注入的例子: 例1:test123456 or 1=1; 加上or 1=1,如果没有防止SQL注入,这样攻击者就能成功登录。 例2:test123456';drop table xxx-- 这样会删除一个表,--后面的就是注释 防御手段 1、禁止采用SQL拼接的形式 这也是最重要的一点,要采用参数化的形式。如mybatis参数占位符要使用##,它会给参数默认带上单引号,所有输入输入的字符当作一个参数来处理,而不是命令,不要使用$$,它不会带单引号有SQL注入的风险。 2、过滤或转义特殊字符 特殊字符包括如:单引号、杠等,或者使用正则表达式过滤如drop table、delete..、update..等危害数据库安全的请求,前后端都要采用措施。 3、数据库用户权利最小化 不要使用最大权限的管理员进行连接,为每个应用使用独立的所在库的账号进行连接,这样使权利最小化。 4、发生异常不要使用错误回显, 即显示默认的服务器500错误,把代码及表名信息直白显示在网页上,这样攻击者就能通过恶意操作使网页出现500错误从而看到数据库表名等内部信息。 5、加密存储敏感信息 用户敏感信息如身份证、手机号、邮箱、卡号等一定要加密存储,而且要妥善保密密钥。

Mybatis 原理

…衆ロ難τιáo~ 提交于 2020-08-12 20:27:06
Mybatis 所有的力量来自 SqlSession 接口,DefaultSqlSession 是它的一个实现类。 DefaultSqlSession 中包括了 Configuration 和 Executor 。 Configuration 在 SqlSessionFactory 的初始化中通过 XMLMapperBuilder 来生成 MappedStatement ,并放入 Configuraion 中。 执行任何 SQL 语句,都是从 SqlSession 进入,从 Configuration 获取 MappedStatement ,然后放入 Executor。 sqlSource 在 MappedStatement 中会变成 boundSql。 在 Executor 中 MappedStatement 和其他一些条件会生成 StatementHandler 。 在 StatementHandler 中实际执行 JDBC 的操作,然后通过 ResultSetHandler 包装好结果回传。 Configuration ---> MappedStatement ---> Executor ---> StatementHandler ---> ResultSetHandler * JDBC 中没有 Transaction 接口,只是通过 Connection 体现了这个概念

自定义注解扫描BEAN

纵然是瞬间 提交于 2020-08-12 19:16:56
自定义注解扫描BEAN 为什么要自定义注解扫描生成bean呢? 这个需求类似Mybatis的Mapper扫描,在项目中有一些代码逻辑是固定的,仅仅是些运行时需要的值不一样,这时候如果将这些逻辑通过一点点的代码就生成多好呀 我在项目中的需求:一些接口需要对接其他系统的接口或者直接访问数据 ,但是这些系统的接口可能会随时更改或者同时可用,或者一会用新版本的一会用旧版本的,我们想在尽量不更改我方代码的情况下对接这些系统,并且可以通过更新数据的方式控制调用的接口版本 思路:核心代码中不直接对接第三方系统,对应他们每一个版本的接口增加一个中间层服务,核心代码中调用这些中间层,每个中间层接口有自己的接口ID更新ID对应的使用地址来达到上面的要求 名词 BeanDefinition BeanDefinition 是对一个类的描述,spring 会根据这些描述来生成一个具体的对象, 他会描述哪些内容呢?类的基本属性,比如Class,spring字义的一些属性,比较scope,lazy,initMethod,destoryMethod等等,这些大都有相对应的定义Bean方法时会用到的注解(@IsLazy, @Scope ,@DepenseOn等等) FactoryBean FactoryBean是一个比较特殊的Bean,当spring发现你要生成的Bean是一个FactoryBean 时

高大上的SSM图书管理系统

…衆ロ難τιáo~ 提交于 2020-08-12 15:52:42
项目描述 Hi,大家好,今天分享的项目是《SSM图书管理系统》,本系统分用户前台和管理员后台。 <br/>用户前台主要功能有: 用户注册 用户登录 设置喜欢的图书标签 我的图书 个人中心 密码重置 <br/>管理员后台的功能有: 图书管理 用户管理 基础信息管理 技术栈 SpringMVC + Spring + MyBatis 运行环境 IDEA + Tomcat8以上 项目截图 下载方式 先点在看,再取源码哦,关注 一点教程 公众号,回复关键词 xz202005 就可以获得下载链接和提取码。如部署过程有问题,后台回复 加我 添加小助手微信。 欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。 如果您对我的系列教程感兴趣,也可以关注我的网站: yiidian.com 来源: oschina 链接: https://my.oschina.net/u/3038200/blog/4462232

mybatis源码分析——数据的绑定

大城市里の小女人 提交于 2020-08-12 15:15:35
  orm的演进过程,jdbc——ibatis——mybatis,jdbc最基础的访问数据库的方式,ibatis基于jdbc进行了封装,程序员 可以直接在xml里面写sql,通过调用dao中的方法执行数据库的操作,mybatis省略了dao的步骤,只需要mapper中的方法与 mapper.xml中的sqlId映射上,就可以直接调用。   1:通过mybatis源码看一下mybatis的实现原理 实现原理就是动态代理,动态代理有两种,jdk代理和cglib代理,jdk代理必须基于接口,在内存中动态生成接口的子类来实现 在上一节中,解析mapper.xml的时候会解析命名空间 public void parse() { if (!configuration.isResourceLoaded(resource)) { // 解析sql,生成mapperStatement configurationElement(parser.evalNode("/mapper")); configuration.addLoadedResource(resource); // 解析命名空间,绑定代理工厂 bindMapperForNamespace(); } parsePendingResultMaps(); parsePendingChacheRefs();

汇总一下Intellij IDEA炫酷的插件

你。 提交于 2020-08-12 11:46:08
1、日晒主题 Solarized Themes 推荐指数:☆☆☆☆☆ 推荐理由:日晒主题本身是为vim定制的。后来移植到ide 非常酷!配色非常耐看。 最近更新不等号显示,注释不可编辑。 背景图可是另外的插件设置的哈Background Image Plus + 2、idea上 类调用时序图 SequenceDiagram for IntelliJ IDEA 推荐指数:☆☆☆ 推荐理由:在梳理别人的代码的时候, 能够很清晰的看到依赖调用时序 3、彩色括号 Rainbow Brackets 4、mybatis插件集合 :MyBatis Log Plugin MyBatisCodeHelperPro Free Mybatis plugin 推荐指数:☆☆☆☆☆ 推荐理由:在sql的xml里也能智能提示了!酷 三个插件都装上吧,相互补充 5、翻译插件 translation plugin 推荐指数:☆☆☆☆ 推荐理由:不能翻墙的同学,请自行百度如何更换为百度翻译。在ide中直接翻译,不需要跳转到网页了,效率神器! 6、打字效果 Power Mode II 装逼指数:☆☆☆☆☆ 推荐理由:这个就是美化的,装逼用的。喜欢的可以试试,让编码不再单调。火焰特效,抖动都可以单独关闭。留下重力碎屑就好了 7、快捷跳转Action方法 RestfulToolkit 推荐指数:☆☆☆☆☆ 推荐理由

2020最新IDEA插件大集合,一款能帮助你写代码的工具是多么重要

廉价感情. 提交于 2020-08-12 08:30:29
摘要 12款为用户精心打造的Idea插件,含盖前后端,另把使用小技巧分享给大家,提高大家的码率,希望对你们有帮助! Lombok Lombok为Java项目提供了非常有趣的附加功能,使用它的注解可以有效的地解决那些繁琐又重复的代码,例如 Setter、Getter、toString、equals、hashCode 以及非空判断等。 举个例子,我们给一个类添加@Getter和@Setter注解: /** * 修改订单费用信息参数 * Created by macro on 2018/10/29. */ @Getter @Setter public class OmsMoneyInfoParam { private Long orderId; private BigDecimal freightAmount; private BigDecimal discountAmount; private Integer status; } Lombok就会为我们自动生成所有属性的Getter和Setter方法。 Free MyBatis Plugin MyBatis扩展插件,可以在Mapper接口的方法和xml实现之间自由跳转,也可以用来一键生成某些xml实现。 我们可以通过Mapper接口中方法左侧的箭头直接跳转到对应的xml实现中去;

mybatis 添加成功并返回主键 /mybatis中useGeneratedKeys和keyProperty的作用

这一生的挚爱 提交于 2020-08-12 06:59:43
当主键是自增的情况下,添加一条记录的同时,其主键是不能使用的,但是有时我们需要该主键,这时我们该如何处理呢?这时我们只需要在其对应xml中加入以下属性即可: useGeneratedKeys="true" keyProperty="对应的主键的对象"。 <insert id="insertTest" parameterType="map" keyProperty="id" useGeneratedKeys="true"></insert> Map map=new HashMap<>(); insertTest(map); System.out.println(JSON.toJSONString(map)); 返回: {id:"**"} 来源: oschina 链接: https://my.oschina.net/u/4370809/blog/4462563

Spring Cloud:认证 授权 OAuth2、JWT

北战南征 提交于 2020-08-12 04:54:41
OAuth2 OAuth2是当前授权的行业标准,其重点在于为Web应用程序、桌面应用程序、移动设备以及室内设备的授权流程提供简单的客户端开发方式。它为第三方应用提供对HTTP服务的有限访问,既可以是资源拥有者通过授权允许第三方应用获取HTTP服务,也可以是第三方以自己的名义获取访问权限。 角色 OAuth2中主要分为了4种角色: Resource Owner(资源所有者),是能够对受保护的资源授予访问权限的实体,可以是一个用户,这时会称为终端用户(end-user)。 Resource Server(资源服务器),持有受保护的资源,允许持有访问令牌(Access Token)的请求访问受保护资源。 Client(客户端),持有资源所有者的授权,代表资源所有者对受保护资源进行访问。 Authorization Server(授权服务器),对资源所有者的授权进行认证,成功后向客户端发送访问令牌。 很多时候,资源服务器和授权服务器是合二为一的,在授权交互的时候作为授权服务器,在请求资源交互时作为资源服务器 Resource Server的配置 Resource Server(可以是授权服务器,也可以是其他的资源服务)提供了受OAuth2保护的资源,这些资源为API接口、Html页面、Js文件等.Spring OAuth2提供了实现此保护功能的Spring Security认证过滤器

SSM项目案例搭建整合含源码(IDEA版)轻松上手

跟風遠走 提交于 2020-08-12 03:43:53
环境: IDEA MySql5.7以上 Tomcat7.0以上 Maven3.0以上 运用Spring MyBatis,mysql 简单前端知识总结来说,配置地狱,各种配置,恶心到吐,还是springboot香,但是总要有个过程吧,难受完了,你会看到新的曙光 1.简洁的运行截图,花里胡哨可以自己加,基础的增删改查CRUD工程师 2.数据库建表,我这里是navicat CREATE DATABASE `ssmbuild` ; USE `ssmbuild` ; DROP TABLE IF EXISTS `books` ; CREATE TABLE `books` ( `bookID` INT ( 10 ) NOT NULL AUTO_INCREMENT COMMENT '书id' , `bookName` VARCHAR ( 100 ) NOT NULL COMMENT '书名' , `bookCounts` INT ( 11 ) NOT NULL COMMENT '数量' , `detail` VARCHAR ( 200 ) NOT NULL COMMENT '描述' , KEY `bookID` ( `bookID` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8 INSERT INTO `books` ( `bookID` ,