spring mvc rest 接口选择性加密解密详情

目录
  • 1.需求
  • 2.分析
  • 3.实现
    • 3.1注解方式
      • 3.1.1定义注解
      • 3.1.2定义注解Aspect切面
      • 3.1.3使用
    • 3.2拦截器
      • 3.2.1定义拦截器
      • 3.2.2配置拦截器
      • 3.2.3使用
  • 4.加密
    • 4.1对称加密
    • 4.2非对称加密
  • 5.加密算法
    • 5.1MD5算法
    • 5.2SHA1算法
    • 5.3HMAC算法
    • 5.4AES/DES/3DES算法
    • 5.5DES算法
    • 5.63DES算法
    • 5.7AES算法
    • 5.8RSA算法
    • 5.9ECC算法
  • 6.加密算法比较
    • 6.1散列算法
    • 6.2对称加密算法
    • 6.3非对称加密算法比较

1.需求

spring mvc rest接口以前是采用https加密的,但是现在需要更加安全的加密。
而且不是对所有的接口进行加密,是对部分接口进行加密,接口返回值进行解密。

2.分析

实现方式有两种:

  • 1.Aspect + Annotation
  • 2.interceptor + requestParameter

第一种方式是最灵活的:自定义注解,然后在Aspect中对注解的方法进行处理。

第二种方法也能实现:自定义拦截器加请求参数与返回参数,即参数中有一个参数控制是否加密解密。

第二种方式很明显参数冗余,管理不变,使用麻烦。
第一种参数就很好了,扩展容易,使用容易,提倡使用。

3.实现

3.1注解方式

3.1.1定义注解

package com.annotation;

import java.lang.annotation.*;

@Target(ElementType.METHOD)
//使用在方法级别上
@Retention(RetentionPolicy.RUNTIME)
//运行时有效
@Documented
//生成文档
public @interface Encryption {
}

3.1.2定义注解Aspect切面

package com.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
//Aspect注解
@Component
//spring bean的自动注解
//aop切面
public class EncryptionAspect {
/**
* 加密切点
*/
@Pointcut("@annotation(com.startimes.selfserviceApp.annotation.Encryption)")
public void encryptionPointcut(){
}

/**
* 前置通知--解密
* @param joinPoint
*/
@Before("encryptionPointcut()")
public void doBefore(JoinPoint joinPoint){
System.out.println("encryptionPointcut");
}

/**
* 后置通知--加密
* @param joinPoint
*/
@After("encryptionPointcut()")
public void doAfter(JoinPoint joinPoint){
System.out.println("encryptionPointcutAfter");
}
}

3.1.3使用

在方法前面加入注解:
@Encryption

3.2拦截器

3.2.1定义拦截器

package com.interceptor;

import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.context.request.WebRequestInterceptor;
public class EncryptionInterceptor implements WebRequestInterceptor {
@Override
public void preHandle(WebRequest request) throws Exception {
//TODO:自定义代码
System.out.println("preHandle");
}
@Override
public void postHandle(WebRequest request, ModelMap model) throws Exception {
//TODO:自定义代码
System.out.println("postHandle");
}
@Override
public void afterCompletion(WebRequest request, Exception ex) throws Exception {
//TODO:自定义代码
System.out.println("afterCompletion");
}
}

3.2.2配置拦截器

3.2.3使用

不使用参数,如果使用参数就在拦截器里判断参数,然后进行相应的处理。

4.加密

4.1对称加密

对于无需加密的接口采用数字签名加密,即https
对于需要加密的接口采用将MD5(session)作为密钥的对称加密
缺点:需要服务器与客户端有相同的session

4.2非对称加密

对于无需加密的接口采用非对称加密,即https+双向认证+自定义证书
对于需要加密的接口采用非对称加密。

5.加密算法

5.1MD5算法

MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。

5.2SHA1算法

SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。

5.3HMAC算法

HMAC 是密钥相关的 哈希运算消息认证码(Hash-based Message Authentication Code),HMAC 运算利用 哈希算法 (MD5、SHA1 等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为 输出。
HMAC 发送方 和 接收方 都有的 key 进行计算,而没有这把 key 的第三方,则是 无法计算 出正确的 散列值的,这样就可以 防止数据被篡改。

5.4AES/DES/3DES算法

AES、DES、3DES 都是 对称 的 块加密算法,加解密 的过程是 可逆的。常用的有 AES128、AES192、AES256 (默认安装的 JDK 尚不支持 AES256,需要安装对应的 jce 补丁进行升级 jce1.7,jce1.8)。

5.5DES算法

DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度 是 56 位,加密解密 用 同一算法。
DES 加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。

5.63DES算法

是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次加密,强度更高。

5.7AES算法

AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。
AES 本身就是为了取代 DES 的,AES 具有更好的 安全性、效率 和 灵活性。

5.8RSA算法

RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。
RSA 加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥。

5.9ECC算法

ECC 也是一种 非对称加密算法,主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA 加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。

6.加密算法比较

6.1散列算法


名称


安全性


速度


SHA-1




MD5



6.2对称加密算法


名称


密钥长度


运行速度


安全性


资源消耗


DES


56


较快




3DES


112、168





AES


128、192、256




6.3非对称加密算法比较


名称


成熟度


安全性


运算速度


资源消耗


RSA






ECC





到此这篇关于spring mvc rest 接口选择性加密解密详情的文章就介绍到这了,更多相关spring mvc rest 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringMVC Restful api接口实现的代码

    [前言] 面向资源的 Restful 风格的 api 接口本着简洁,资源,便于扩展,便于理解等等各项优势,在如今的系统服务中越来越受欢迎. .net平台有WebAPi项目是专门用来实现Restful api的,其良好的系统封装,简洁优雅的代码实现,深受.net平台开发人员所青睐,在后台服务api接口中,已经逐步取代了辉煌一时MVC Controller,更准确地说,合适的项目使用更加合适的工具,开发效率将会更加高效. python平台有tornado框架,也是原生支持了Restful api,在

  • SpringMVC JSON数据交互及RESTful支持实现方法

    JSON概述 JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式,最近几年才流行起来.JSON是基于JavaScript的一个子集,使用了C.C++.C#.Java. JavaScript.Per. Python等其他语言的约定,采用完全独立于编程语言的文本格式来存储和表示数据.这些特性使JSON成为理想的数据交互语言,它易于阅读和编写,同时也易于机器解析和生成. 与XML一样,JSON也是基于纯文本的数据格式.初学者可以使用JSON传输一个

  • springmvc使用REST出现:Request method 'PUT' not supported问题

    目录 使用REST出现:Requestmethod'PUT'notsupported 解决办法 步骤如下 Requestmethod'PUT'/'POST'notsupported之可能的一个原因 如下所示 使用REST出现:Request method 'PUT' not supported 在SpringMVC学习过程中,练习使用REST风格的进行简单的CRUD的DEMO的时候,在执行Edit操作后出现了如下图405的错误.在提交页面的action中的请求前加上${pageContext.r

  • springMVC中RestTemplate传值接值方法

    我们需要给接口推送数据以及接口接收数据的时候,可以用springmvc中的一种简单方法 1.需要在spring-mvc.xml中配置信息转化器. <bean id = "stringHttpMessageConverter" class = "org.springframework.http.converter.StringHttpMessageConverter"/> <bean id="jsonHttpMessageConverter

  • 如何利用Spring MVC实现RESTful风格

    目录 SpringMVC实现RESTful风格 RESTful 使用SpringMVC实现RESTful风格 静态资源访问问题 SpringMVC的RESTful学习 什么RESTful 使用简单的加法计算 SpringMVC实现RESTful风格 RESTful 中文释义为”表现层状态转换“,它不是一种标准,而是一种设计风格. 它的主要作用是充分并正确利用HTTP协议的特性,规范资源获取的URI路径. 通俗的讲,RESTful风格的设计允许将参数通过URL拼接传到服务端,目的是让URL看起来更

  • spring mvc rest 接口选择性加密解密详情

    目录 1.需求 2.分析 3.实现 3.1注解方式 3.1.1定义注解 3.1.2定义注解Aspect切面 3.1.3使用 3.2拦截器 3.2.1定义拦截器 3.2.2配置拦截器 3.2.3使用 4.加密 4.1对称加密 4.2非对称加密 5.加密算法 5.1MD5算法 5.2SHA1算法 5.3HMAC算法 5.4AES/DES/3DES算法 5.5DES算法 5.63DES算法 5.7AES算法 5.8RSA算法 5.9ECC算法 6.加密算法比较 6.1散列算法 6.2对称加密算法 6.

  • Spring Boot 接口参数加密解密的实现方法

    因为有小伙伴刚好问到这个问题,松哥就抽空撸一篇文章和大家聊聊这个话题. 加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办法,这种方式虽然粗暴,但是灵活,因为可以拿到一手的请求参数和响应数据.不过 SpringMVC 中给我们提供了 ResponseBodyAdvice 和 RequestBodyAdvice,利用这两个工具可以对请求和响应进行预处理,非常方便. 所以今天这篇文章有两个目的: 分享参数/响应加解密的思路. 分享 Response

  • spring MVC中接口参数解析的过程详解

    前言 前天工作中遇到了这样一个问题,我在接口的参数封装了一个pojo,这是很常见的,当参数一多,惯性的思维就是封装一个pojo.那么在参数前有很多注解可以添加,比如:@requestParam,@requestBody,@pathvariable等.我的理解是这样的,首先我先申明,我并是没有看过源码,只是凭经验理解.@requestParam试用于get请求,参数在http的header中的URL上,具体放在?后面以key=value的形式存在.@requestBody适用于post请求中参数在

  • 基于Spring MVC 简介及入门小例子(推荐)

    一.什么是 Spring MVC Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面,是一个强大灵活的 Web 框架.Spring MVC 提供了一个 DispatcherServlet 作为前端控制器来分配请求.通过策略接口,Spring 框架是高度可配置的.Spring MVC 还包含多种视图技术,如 Java Server Pages(JSP).Velocity.Tiles.iText 和 POI 等.Spring MV

  • Spring MVC接口防数据篡改和重复提交

    本文实例为大家分享了Spring MVC接口防数据篡改和重复提交的具体代码,供大家参考,具体内容如下 一.自定义一个注解,此注解可以使用在方法上或类上 使用在方法上,表示此方法需要数据校验 使用在类上,表示此类下的所有方法需要数据校验 此注解对无参数方法不起作用 import org.springframework.stereotype.Component; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionP

  • SpringBoot接口加密解密统一处理

    我们与客户端的接口交互中,为了更高的安全性,我们可能需要对接口加密(请求参数加密,服务端解密).返回信息加密(服务端加密,客户端解密),但是也不是所有的接口都这样,有些接口可能不需要,我们可以使用注解来轻松达到此要求. 将接口参数的加密解密和返回信息的加密解密分开,分别定义注解,利用Controller的ControllerAdvice来拦截所有的请求,在其中判断是否需要加密解密,即可达到要求. 使用方法:使用 DecryptRequest 和 EncryptResponse 注解即可,可以放在

  • Spring MVC的优点与核心接口_动力节点Java学院整理

    为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平.你的一个决定会影响团队未来的几年.要考虑方面太多: 1.简单易用,以提高开发效率.使小部分的精力在框架上,大部分的精力放在业务上. 2.性能优秀,这是一个最能吸引眼球的话题. 3.尽量使用大众的框架(避免使用小众的.私有的框架),新招聘来的开发人员有一些这方面技术积累,减低人员流动再适应的影响. 如果你还在为这件事件发愁,本文最适合你了.选择Spring MVC吧. Spring MVC是当前最优秀的MVC

  • PHP的RSA加密解密方法以及开发接口使用

    网络安全问题很重要,尤其是保证数据安全,遇到很多在写接口的程序员直接都是明文数据传输,在我看来这是很不专业的.本人提倡经过接口的数据都要进行加密解密之后进行使用. 这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下. 简单介绍RSA RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新手对它不太了解.下面仅作简要介绍.RSA是第一个比较完善的公开密钥算法,它既能

  • Spring Cloud微服务架构的构建:分布式配置中心(加密解密功能)

    前言 要会用,首先要了解.图懒得画,借鉴网上大牛的图吧,springcloud组建架构如图: 微服务架构的应用场景: 1.系统拆分,多个子系统 2.每个子系统可部署多个应用,应用之间负载均衡实现 3.需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现. 4.所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判断一个URL请求由哪个服务处理.请求转发到服务上的时候也使用负载均衡. 5.服务之间有时候也需要相互访问.例如有一个

  • 如何使用新方式编写Spring MVC接口

    1. 前言 通常我们编写 Spring MVC 接口的范式是这样的: @RestController @RequestMapping("/v1/userinfo") public class UserInfoController { @GetMapping("/foo") public String foo() { return "felord.cn"; } } 这种我都写吐了,今天换个口味,使用 Spring 5 新引入的函数式端点(Funct

随机推荐