繁体   English   中英

在客户端 JS 中加密请求参数,在 Java(Spring 控制器)中解密请求参数

[英]Encrypt Request Param in Client-Side JS, Decrypt Request Param in Java (Spring Controller)

我需要使用加密参数从客户端(JS)调用 URL。 然后我需要从它去的服务器端 controller 解密 URL。

假设我有window.location.href = "/app/submitted?docId=445";

我需要加密docId=445部分。 我可以使用atob/btoa作为

window.location.href = "/app/submitted?" + atob("docId=445"); // Whole Param
window.location.href = "/app/submitted?docId=" + atob("445"); // Just the value

我更喜欢#1,但是在这两个中,当我来到我的 SpringMVC Controller 时,我将如何提取和解密这个参数? 是否有等效于atob/btoa的 Java 加密?

@GetMapping("/app/submitted")
public ModelAndView  submitted(HttpServletRequest request, HttpServletResponse response, 
        @RequestParam("docId") Integer docId) {
      //...
      // How to decrypt here (either whole param or just the value) from an atob/btoa?

}

或者我应该在这里使用编码而不是加密来保证两层的等价性? 我的目标是避免在地址栏中的任何位置显示 ID。

我认为您要的是 base64 在服务器端编码/解码 - 是的 Java 肯定可以做到这一点

@GetMapping("/app/submitted")
public ModelAndView  submitted(HttpServletRequest request, HttpServletResponse response, 
    @RequestParam("docId") String docId) {
  //...
  byte[] decodedDocIdBytes = Base64.getDecoder().decode(docId);
  String decodedDocIdAsString = new String(decoodDocIdBytes);

 }

请注意,docId 已更改为字符串。

作为旁注 - base64 代码不是加密的,所以如果你真的想保守 docId 的秘密,我会寻找另一种方法。 如果这是一个 REST(ish) API,那么资源 ID (docIds) 不应该有任何外部含义,因此不需要隐藏它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM