【问题标题】:Encrypt Request Param in Client-Side JS, Decrypt Request Param in Java (Spring Controller)在客户端 JS 中加密请求参数,在 Java 中解密请求参数(Spring 控制器)
【发布时间】:2019-09-25 15:26:55
【问题描述】:

我需要使用加密参数从客户端 (JS) 调用 URL。然后我需要从它去往的服务器端控制器中解密 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 控制器时,我将如何提取和解密这个参数?是否有相当于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。

【问题讨论】:

    标签: javascript java spring spring-mvc encryption


    【解决方案1】:

    我认为您要求的是服务器端的 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) 不应具有任何外部含义,因此不应要求隐藏它们。

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 2018-03-23
      相关资源
      最近更新 更多