gpt4 book ai didi

java - 谁在调用我的 HttpServletRequest?

转载 作者:搜寻专家 更新时间:2023-11-01 02:14:43 25 4
gpt4 key购买 nike

我有一个 jsp,其中包含一个 jquery post 到我的 tomcat 服务器上的一个 servlet,它创建了一个 HttpServletRequest。我想确保只处理我的 jsp 对我的 servlet 的调用,并且忽略来 self 的 jsp 以外的来源的任何请求。是否有保证的方法可以查看调用我的服务器的引用页面是什么?我读过使用 request.getHeader("referer") 可以被欺骗,所以我知道我不能依赖它。

最佳答案

生成一个唯一的字符串作为 token ,将其存储在 session 中并将其作为隐藏输入值嵌入到 JSP 的 POST 形式中,最后在 servlet 中检查 token 是否有效。

基本上:

关于 session 创建(例如在 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);

关于处理 JSP 本身:

<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 的情况下工作得很好)。

关于java - 谁在调用我的 HttpServletRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com