![](/img/trans.png)
[英]Passing javascript variable to spring MVC controller with request param
[英]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.