移动端接口加密

2023-11-03

   最近公司写的android接口需要加密,防止被恶意攻击。

 

2加密规则想了个简单的办法,传两个参数,一个是string类型的另一种是MD5加密的密文,在服务端写个拦截器/或者过滤器去拦截他,然后做自己相应的逻辑处理,把string类型的字段拿过来加上其他一些东西,用MD5加密和传过来的密文做相应的比较。

3 下面就是重点了,最开始的时候我想到的使用拦截器对url进行拦截,然后做处理,但是我们的服务端不只是对android提供服务接口,还有一些内部的请求,可有时我们的接口是rest风格的,使用resteasy写的,他的请求方式和springmvc又不太一样,

  @Component
  @Path("services")
  @Produces({ "application/json"})
  @Consumes({ "application/json" })

这种风格的,但是spring的请求是这种风格的

    @Controller

  @RequestMapping(value = "/../..")

拦截器配置

 <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/services/**"/>
            <bean class="*.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
但是这样配置com.zk.interceptors.MyInterceptor 实现了 HandlerInterceptor接口,可以拦截@RequestMapping注解的类和方法
这样无法拦截,最后想的办法是
      <mvc:interceptors>
            <bean class="*.MyInterceptor"></bean>
           </mvc:interceptors>
这样把所有的url进行拦截,然后在拦截器自己手动过滤掉不需要拦截的url,对拦截的进行处理,但是最后一想这样是对所有url进行拦截,肯定对系统的效率有所影响,

4然后想到的是利用切面,自己写个切面,配置切入点,利用切面的 @Before("execution(* *.*(..))") 通知进行处理。配置切面。具体可以看一些这个
http://www.cnblogs.com/friends-wf/p/3832876.html

5最后完美主义的人不能容忍这样的事,感觉切面不是很完美,最后想到去拦截器拦截url,过滤器也可以做到这样的是,可以先看一下两者的区别
http://www.blogjava.net/hello-yun/archive/2011/11/21/364469.html

在写过滤器的时候,需要获取request的参数,get请求servletRequest.getParameter(""),直接这样写就可以获取到,但是最麻烦的是post请求
因为post请求有一些数据会写入到流中,你需要去流中获取数据,

/**
* 获取request流中的数据
* @param request
* @return
* @throws Exception
*/
public String getDate(HttpServletRequest request) throws Exception{
StringBuilder sb = new StringBuilder();
InputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = request.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}

这样数据也可以获取到了,做到这我以为可以了,但是一测数据得到了,但是在执行不下去,因为你在filter获取到流中的数据,流中数据只能读取一次,

你读完了,业务处理中读取不到,你需要回写流中的数据。

package com.imxiaomai.cb.wms.web.filter;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
* User: liqiang
*/
public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {

private final byte[] body;

public BodyReaderHttpServletRequestWrapper(HttpServletRequest request,String data) throws IOException {
super(request);
body = data.getBytes(Charset.forName("UTF-8"));
}

@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}

@Override
public ServletInputStream getInputStream() throws IOException {

final ByteArrayInputStream bais = new ByteArrayInputStream(body);

return new ServletInputStream() {

@Override
public int read() throws IOException {
return bais.read();
}

public boolean isFinished() {
return false;
}

public boolean isReady() {
return false;
}
};
}
}

 

转载于:https://www.cnblogs.com/Frozen-snow/p/4794253.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动端接口加密 的相关文章

随机推荐

  • 现代后端开发者必备技能-2018版

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天的Web开发与几年前完全不同 有很多不同的东西可以很容易地阻止任何人进入Web开发 这是我们决定制作这些循序渐进的视觉指南的原因之一 这些指南展示了更大的图景 并让任何
  • 「万向区块链专家观点」深度解析“区块链+物联网”与新基建

    本文从属于万向区块链 融合创新 系列行业研究报告 作者为万向区块链首席经济学家邹传伟博士 2020年10月27日至28日 万向区块链实验室将主办主题为 融合创新 的第六届区块链全球峰会 近期 万向区块链蜂巢学院B站直播间也将特别推出 融合创
  • 带你读源码:四大视角多维走读区块链源码

    引子 区块链作为 新基建 的重要组成部分 越来越受技术爱好者关注 区块链极客信奉 code is law 相信通过代码可以构筑一个可信的世界 而作为一门综合学科技术 区块链建立在数学 密码学 计算机原理 分布式网络和博弈论等众多基础学科之上
  • scp命令下载整个目录

    linux文件夹下载 1 压缩文件夹 tar cvzf chinese tar gz usr share fonts chinese 2 下载 sz chinese tar gz 从Linux服务器下载文件夹到本地 1 使用scp命令 sc
  • Python实现快速傅里叶变换(FFT)

    相关文章 傅立叶级数展开初探 Python 这里做一下记录 关于FFT就不做介绍了 直接贴上代码 有详细注释的了 import numpy as np from scipy fftpack import fft ifft import ma
  • 【存档】CSDN社区之星专访:我的蜕变之路

    最近要接受一家技术媒体的专访 想起 10年前CSDN也采访过我一次 于是网上搜了搜 遗憾的是 原文链接已经失效了 幸好有位叫 阿飞冲冲冲 的网友转载了 我再转过来 顺便也读一遍 找找 初心 摘要 社区之星第49期采访了爱奇艺研发总监陆其明
  • angular6学习(九):数据绑定到事件

    实现功能 将html页面中文本框的输入的内容传递到ts文件 然后在html文件中显示ts文件中的这个内容 html文件 一 绑定到事件 ts文件 显示结果 二 双向绑定 html app module ts
  • Swing的布局管理器 --转载

    11月24日 Swing的布局管理器 转载 1 先说说Swing中的不一般的组件 JFrame JDialog JWindow JApplet这四个组件是重量级组件 因为要在操作系统中显示窗口画面 必须使用操作系统的窗口资源 所以JFram
  • java怎么打开_java开不了怎么办?java怎么打开?

    我们在打开java软件的时候 总是提示打不开 这可急坏了小伙伴 软件打不开 就无法写程序了 那么接下来 我们就来给大家讲解一下java开不了的解决方法 1 先保证正确安装了JAVA环境 2 再打开 控制面板 中的 Java 组件设置程序 3
  • 去除lcd图片的摩尔纹_科普必修

    妊娠纹是怀孕期间出现在下腹部 臀部 胸部 背部或四肢近端 呈紫色或是紫红色的条纹 据统计 大约70 90 的孕妇在首次怀孕时 会出现妊娠纹 妊娠纹虽对身体健康没有大的危害 但却给罹患孕妇带来了很大的精神压力和心理负担 从而影响其生活质量 什
  • Unity报错 error CS0246: The type or namespace name ‘UI‘ could not be found

    Unity报错 error CS0246 The type or namespace name UI could not be found 在我导入老版本的UnityPackage到2021年1月份的Unity版本的时候 出现了许多警告和e
  • Java网络编程(四) Reactor和Proactor模式

    size medium 在高性能的I O设计中 有两个比较著名的模式Reactor和Proactor模式 其中Reactor模式用于同步I O 而Proactor运用于异步I O操作 color blue b 同步和异步 b color 同
  • 数据仓库与数据挖掘(一)

    1 简述数据仓库有哪些特征 面向主题 集成 稳定性即非易失的 随时间而变化即时变的 2 简述数据仓库与传统数据库的主要区别 一个是数据库 一个是数据仓库 就不是一个东西 怎么区别嘛 数据仓库是建立在数据库之上的一个数据环境 3 为什么需要分
  • Linux下监测网卡状态

    目录 1 说明 2 解析命令法 2 1 CODE 2 2 TEST 3 SOCKET法 1 说明 此代码主要对Linux下网卡4种状态进行检测 可以检查 网卡是否存在 网卡是否down 网卡UP 插了网线 RUNNING 网卡UP 没有插网
  • k8s nginx .yaml 测试

    apiVersion apps v1 kind Deployment metadata name nginx test spec replicas 2 selector matchLabels app nginx test template
  • c++中,什么时候用 A a;和什么时候用A a=new A;

    说明 此处内容是在网上摘抄的 总结一下 为了以后查找方面 new是在堆上分配内存 它需要用delete释放 否则会造成内存泄漏 使用的内存没有即时释放 造成内存的浪费 而A a在右大括号执行后 会自动释放内存 如 int main A a
  • Matlab funnction函数定义及常见扩展应用(@函数句柄,feval函数等)

    目录 MATLAB函数定义 1 函数文件 调用函数文件 定义多个M文件 2 函数文件 子函数 定义一个具有多个子函数的M文件 3 Inline 无需M文件 直接定义 4 匿名函数 5 Syms subs 无需M文件 直接定义 6 字符串 s
  • 数据持久化(Json,二进制,PlayerPrefs)

    数据持久化 文章目录 数据持久化 数据持久化概述 1 数据持久化 JSON 1 Json简介 2 JsonUtility相关知识点 3 LitJson相关知识 4 JsonMgr管理器的书写 2 数据持久化 二进制 1 二进制简介 2 文件
  • Nodejs之Buffer数据转ReadSteam

    当要处理的是一个文件时 stream fs createReadStream content txt 返回一个readStream 文件读取流 输入流 对象 可读流 当处理的是一个Buffer时 用createReadStream就会报错
  • 移动端接口加密

    最近公司写的android接口需要加密 防止被恶意攻击 2加密规则想了个简单的办法 传两个参数 一个是string类型的另一种是MD5加密的密文 在服务端写个拦截器 或者过滤器去拦截他 然后做自己相应的逻辑处理 把string类型的字段拿过