上一篇主要讲了整个项目的子模块及第三方依赖的版本号统一管理维护,数据库对接及缓存(Redis)接入,今天我来说说过滤器配置及拦截设置、接口安全处理、AOP切面实现等。作为电商项目,不仅要求考虑高并发带来的压力,更要考虑项目的安全稳固及可扩展。首先我们说说接口安全。

一,接口安全

说起安全,这似乎是IT行业一直以来的重点话题。实际真正的项目安全,更多的是运维工程师(安全专家)从网络和服务器层面保护。目前基本每个大的互联网公司都有一个安全团队(推荐大家了解下阿里安全专家吴翰清)。今天我要说的只是接口安全防护(如何防止恶意请求、数据篡改),这也是好多中高级开发者经常在面试中被问到的话题。首先我说说思路,目前接口安全的基本防护方案就是:令牌+签名,也有采用非对称加密密文传输,https协议传输等方案。

1,令牌+签名

这是今天要说的重点,令牌+签名到底怎么实现接口安全请求呢?

签名实现:最简单的实现就是先把你要请求的参数转化为字符串,再通过MD5给这个字符串加密,然后将加密后的字符串作为签名参数。Java后台再写一个过滤器,当请求进入过滤器,先取出参数在过滤器里按照这个规则生成校验。但在实际开发中,这种方式很容易被他人模仿请求你的接口,那怎么办呢?其实很简单,给MD5生成的那个签名“撒盐”,也就是给那个签名的字符串里的某个或某些片段植入随机字符串,然后在后台过滤器校验时,把这个片段内容取出替换后台生成的参数签名里的那个片段再对比校验。

令牌实现:令牌也就是我们常说的token,在用户登录后,生成一个唯一的token,并将这个token作为key,登录者信息(一般都是封装的登录实体类)作为值存到Redis中,并将token返回给用户。用户要访问其他接口,那你就必须带token,在过滤器检验完签名后,然后取到请求参数里的token,再查询Redis检验Token是否有效,校验不通过直接拦截返回。

部分代码片段

注意,这里都是以封装的实体和工具类处理返回。返回实体及返回工具类代码如下:

自定义异常枚举类:

注意:过滤器的一定要实现Filter接口,并添加注解

@WebFilter(filterName = "myFilter",urlPatterns = {"/*"}),如:

@WebFilter(filterName = "myFilter",urlPatterns = {"/*"})
public class MyFilter implements Filter {

然后重写doFilter()方法。

2,非对称密文传输

这个方案实现起来很简单,可以先用RSA生成一对密钥(公钥何私钥),服务端保存私钥,公钥给要访问的客户端,客户端在请求接口时,把参数用RSA公钥加密,服务端接收到客户端请求传入的密文,用自己的私钥解密。这样就算有人获取到你的请求密文,甚至获取到客户端的公钥,那也没用,解不开,哪有人说了,如果拿到公钥了,就可以随意请求你的接口了。哪有你想的那么简单,后台可以在过滤器再加个校验签名不就解决了。对一般的接口,是没必要使用非对称密文传输的,加密解密需要时间开销,所以针对不同的业务场景,选择合适自己的方案。

3,令牌+签名方案测试验证

这里我启动服务测试一下,先在启动类里添加包扫描,然后启动服务测试。

在启动服务前,已写好的接口(用户的添加和登录接口)。

参数不带token和签名请求添加用户接口。

参数里随机添加签名(未按约定规则生成)请求接口。

参数里的签名按规则生成并发请求,这时开始验证token。

那么我先登录,获取token再发起请求。

再看看数据库。

二,AOP切面实现

这里用Aop主要实现日志及异常处理,首先我们在接口层(lyn-web)创建一个Aop的切面类,如下:

定义好切面,然后写前置通知,后置通知,环绕通知。

前置通知主要打印了请求接口、IP、接口请求方式等信息,环绕通知抓取了接口的响应时间和异常处理,后置通知打印了相应的参数。接下来我将使用Aop实现一些其他功能。

三,防SQL注入实现

先写一个非法字符检验工具类:

然后在AOP里写一个参数检查方法:

再在环绕通知里执行访问接口前操作执行检查方法

测试,参数带sql注入关键词(Drop  user_info)发起请求。

看打印的日志:

那我们去掉去掉非法关键词再发起请求:

再看看日志:

添加成功的数据库数据:

推荐阅读:

Spring Boot实现分布式微服务开发实战系列(三)

Spring Boot实现分布式微服务开发实战系列(二)

Spring Boot实现分布式微服务开发实战系列(一)

下期文章:深入介绍项目的配置,优化相关,以及缓存安全防范,Kafka的对接等内容。

获取项目源代码,请扫码关注公众号,并发送Springboot获取。

SpringBoot微服务电商项目开发实战 --- api接口安全算法、AOP切面及防SQL注入实现的更多相关文章

  1. SpringBoot微服务电商项目开发实战 --- Redis缓存雪崩、缓存穿透、缓存击穿防范

    最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...

  2. SpringBoot微服务电商项目开发实战 --- 模块版本号统一管理及Redis集成实现

    上一篇文章总结了基于SpringBoot实现分布式微服务下的统一配置.分环境部署配置.以及服务端模块的分离(每一个提供者就是一个独立的微服务).微服务落地.Dubbo整合及提供者.消费者的配置实现.本 ...

  3. SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

    SpringBoot分布式开发系列文章已经持续了一段时间了,每一篇都有核心内容讲给大家.比如:分环境部署配置及服务端口号统一配置,子模块版本号管理及第三方jar依赖管理,单点登录实现,接口安全(签名+ ...

  4. SpringBoot微服务电商项目开发实战 --- 全局异常处理

    上一篇文章讲了Redis缓存的安全防范及Kafka的接入及消息实现,今天接着前面的内容基础说说项目的优化和基础配置,今天要讲的内容主要是Spring Boot项目中的全局异常处理.为什么要做这件事呢? ...

  5. SpringBoot微服务电商项目开发实战 --- Kafka集成接入

    kafka作为消息中间件的一款产品,她比较轻量级,在吞吐量方面很优秀,默认消息持久化到硬盘当中 168小时=7天,log.retention.hours=168,比较适合来做运营的统计.其他的不多讲, ...

  6. Spring Boot微服务电商项目开发实战 --- 分布式开发要避的那些坑

    今天已经进入第七讲了,整个微服务架构的搭建工作也基本完成.那到目前为止究竟使用了那些技术及实现了什么功能呢?我们先回顾一下. 使用的技术:SpringBoot.Dubbo.Zookeeper.Redi ...

  7. Spring Boot微服务电商项目开发实战 --- 基础配置及搭建

    根据SpringBoot实现分布式微服务项目近两年的开发经验,今天决定开始做SpringBoot实现分布式微服务项目的系列文章,帮助其他正在使用或计划使用SringBoot开发的小伙伴们.本次系列文章 ...

  8. Spring Boot微服务电商项目开发实战 --- 多环境部署配置、端口号统一配置及Dubbo提供者消费者实现

    昨天已经搭建好了SpringBoot基于Maven的基础父子级项目,今天开始进入项目分模块及分布式实现.首先我们基于昨天的项目,在父级工程下建lyn-sys,lyn-customer,lyn-good ...

  9. Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构

    Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...

随机推荐

  1. Android状态栏兼容4.4.4与5.0,Android5.0状态栏由半透明设置为全透明

    //判断android 版本然后设置Systembar颜色 public void initSystemBar() { Window window = getWindow(); //4.4版本及以上 ...

  2. leetcode 114二叉树转换成链表

    解法一 可以发现展开的顺序其实就是二叉树的先序遍历.算法和 94 题中序遍历的 Morris 算法有些神似,我们需要两步完成这道题. 将左子树插入到右子树的地方 将原来的右子树接到左子树的最右边节点 ...

  3. ERROR: Unrecognized command line argument: 'use'

    Unrecognized command line argument: 'use' gvm--GoLang语言多版本管理工具 基础环境 centos6.5 报错内容 gvm在命令行以外的任何地方调用 ...

  4. 理解Java对象序列化【转】

      原文链接:http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 关于Java序列化的文章早已是汗牛充栋了,本文是 ...

  5. if判断语句的总结

    1.表达式:关系表达式或逻辑表达式: 2.表达式的运算结果应该是“真”或者“假”: 真:执行该语句:            假:跳过该语句,执行下一条语句: 3.“语句”可以是单语句也可以是复合语句: ...

  6. 微服务与Spring Cloud概述

    微服务与Spring Cloud随着互联网的快速发展, 云计算近十年也得到蓬勃发展, 企业的IT环境和IT架构也逐渐在发生变革,从过去的单体应用架构发展为至今广泛流行的微服务架构. 微服务是一种架构风 ...

  7. 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr 使用介绍

    第2周第3次课(3月28日) 课程内容:2.14 文件和目录权限chmod2.15 更改所有者和所属组chown2.16 umask2.17 隐藏权限lsattr/chattr 2.14 文件和目录权 ...

  8. wpa_supplicant的移植

    解压,进入,使用默认配置文件 cd wpa_supplicant-2.6 cp defconfig .config 修改.config文件,修改部分,根据自己的需要进行这部分的配置 #指定libnl的 ...

  9. SpringBoot系列之集成jsp模板引擎

    目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...

  10. 来看看Python炫酷的颜色输出与进度条打印

    英语单词优化 上篇文章写到了Python开发英语单词记忆工具,其中依赖了bootstrap.css jQuery.js 基础html模块以及片段的css样式.有些朋友问,怎么能将这个练习题打包成单独的 ...