在java中编码api响应并在角度js中解码

时间:2018-01-17 14:44:59

标签: javascript java angular

当我们读取响应时,有没有办法从java编码api响应并在角度js中解码相同的?

这里有详细说明,我有java代码,点击登录按钮后发送OTP到用户邮件,用户必须输入相同的身份验证。当我调用api从角度js代码发送otp时api正在返回otp作为响应,这需要验证用户是否输入了正确的otp。 问题是我可以通过检查网络中的元素来看到otp。

任何人都可以告诉我有没有办法隐藏网络中的响应 或

  1. 在带有api调用的角度js中获取OTP(在java代码中生成并发送到邮件)

  2. 或在java和js中兼容的任何内置方法/类

2 个答案:

答案 0 :(得分:1)

你无法真正隐藏网络数据包,但你可以改变数据包的方向:最好将OTP从客户端发送到服务器,让服务器检查OTP是否正确。

一步一步:

Client                  Server                     Mail
|     Request OTP Auth     |                          |
|------------------------->|                          |
|                          |                          |
|                          |     Send OTP by email    |
|                          |------------------------->|
|      ACK Response        |                          |
|<-------------------------|                          |
|                          |                          |
|      Send user OTP       |                          |
|------------------------->|                          |
|                          |                          |
|   Valid or Not Response  |                          |
|<-------------------------|                          |

要实现这一点,您可以使用用户的HTTP会话或密钥/价值系统,例如redis。

答案 1 :(得分:0)

您可以在 java 中使用 Base64 编码对您的响应进行编码,并在 angular 中使用 atob() 对其进行解码。 atob() 是一个 js 函数,用于解码 base-64 编码的字符串。

如果你的api响应是JSON格式,你可以先在java中使用ObjectMapper将对象转换成String,然后再应用base 64 e.g

Java

"Max: " + longestWords

注意:object.toString() 不会给你对象的字符串值。

角度

ObjectMapper mapper = new ObjectMapper();
            
try {
                
String mechant = mapper.writeValueAsString(service.accounts(id));
String mechantEncoded = Base64.getEncoder().encodeToString(mechant.getBytes());
}catch(Exception et){}