1.问题描述
我的工程中需要用户在前端输入口令并进行一些计算,然后将计算后的口令发送至后台服务器进行计算。之前采用的手段是直接发送一个GET请求:
location.href = "/demoserver?username="+username+"&password="+password;
但是这样做会产生一个比较隐蔽的问题:用户的口令中有可能包含“&”或者“%”等有着特殊语义的字符,会导致服务器不能正确理解URL的语义。
2.解决方法:
location.href是无法发送POST请求的,所以我们还是要调用form中的submit()函数。具体可以构造一个专门用于发送POST请求的form节点,如下所示:
在html中添加:
<form style = "display:hidden" action = "/demoserver" method = "POST" id = "register">
<input type = "hidden" id = "id_username" name = "username" value = ""/>
<input type = "hidden" id = "id_password" name = "password" value = ""/>
<input type = "hidden" name = "${_csrf.parameterName}" value="${_csrf.token}" />
</form>
...
<script type = "text/javascript" src = "resources/js/jquery-3.2.1.min.js"></script>
在对应的JS文件中添加:
var username = ...;
var password = ...;
$("#id_username").val(username);
$("#id_password").val(password);
$("#register").submit();