我有一个包含jquery post到我的tomcat服务器上的servlet的jsp,它创建了一个HttpServletRequest
。 我想确保只处理来自我的jsp对我的servlet的调用,并忽略来自jsp之外的任何来源的请求。是否有一种可靠的方法可以查看是哪个引用页面调用了我的服务器?我已经阅读过使用request.getHeader("referer")
可能会被欺骗,所以我知道我不能依赖它。
HttpSessionListener#sessionCreated()
}}中):Set<String> tokens = new HashSet<String>();
event.getSession().setAttribute("tokens", tokens);
在 JSP 请求的预处理中(例如在 HttpServlet#doGet()
中):
String token = UUID.randomUUID().toString();
Set<String> tokens = (Set<String>) request.getSession().getAttribute("tokens");
tokens.add(token);
request.setAttribute("token", token);
<input type="hidden" name="token" value="${token}" />
HttpServlet#doPost()
中),需要进行以下操作:String token = request.getParameter("token");
Set<String> tokens = (Set<String>) request.getSession().getAttribute("tokens");
if (!tokens.remove(token)) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
// ...
jQuery.post()
函数是以一种不唐突的方式编写的,如$.post(form.action, form.serialize(), callback)
,以便它完全模拟正常的同步请求(换句话说,你的表单在禁用JS时仍然可以正常工作)。
<c:out>
或fn:escapeXml()
。参见https://dev59.com/13E85IYBdhLWcg3wr1ke#2658941。 - BalusC