gpt4 book ai didi

Java Servlet - 当 servlet 是安全的时不同的 JSESSIONID。为什么?

转载 作者:行者123 更新时间:2023-11-28 22:19:37 25 4
gpt4 key购买 nike

我删除了之前的帖子以重新创建一个更清晰的帖子。有关信息,我简化了代码以使其更简单。

我向您展示我的问题。

我的 servlet HelloWorld :

public class HelloWorld extends HttpServlet {

private String message;

public void init() throws ServletException {
// Do required initialization
message = "Hello World";
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");

// session test
System.out.println( request.getSession().getId() );

PrintWriter out = response.getWriter();
out.println("<html><head><script src='./dwr/engine.js'></script><script src='./dwr/util.js'></script></head><body><h1>Hello World</h1></body></html>");
}

public void destroy() {
// do nothing.
}
}

servlet 显示带有消息 HellWorld 的 html 页面并包含 DWR(直接 Web 远程处理)javascript 文件。 DWR javascript 文件从 servlet/dwr/检索。

网络.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>TestDWR2</display-name>

<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>test.HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld/*</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>WEB-INF/dwr.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

<security-constraint>
<web-resource-collection>
<web-resource-name>Extranet resource</web-resource-name>
<description>Extranet resources</description>
<url-pattern>/HelloWorld/*</url-pattern>
<url-pattern>/dwr/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>intranet_admin</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Extranet</realm-name>
</login-config>

<security-role>
<description>Intranet Admin</description>
<role-name>intranet_admin</role-name>
</security-role>

</web-app>

servlet/HelloWorld 和/dwr 是安全的。登录基于tomcat用户数据库:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<user username="tomcat" password="tomcat" roles="intranet_admin"/>
</tomcat-users>

HTTP请求/响应:

用于 HelloWorld servlet 调用

enter image description here

用于 DWR servlet 调用 (engine.js)

enter image description here

用于 DWR servlet 调用 (util.js)

enter image description here

用于 DWR servlet 调用 (_System.pageLoaded.dwr)

enter image description here

如您所见,每个请求的 JSESSIONID 更改,这是我的问题,我有一段时间无法解决...

最近几天我还在进步。我现在知道问题仅在 servlet 安全时出现:

    <web-resource-collection>
<web-resource-name>Extranet resource</web-resource-name>
<description>Extranet resources</description>
<url-pattern>/HelloWorld/*</url-pattern>
<url-pattern>/dwr/*</url-pattern>
</web-resource-collection>

如果删除此安全性,则每个请求返回相同的 JSESSIONID。为什么?我说这与DWR无关。当我调用一个servlet返回另一个JS,比如jQuery时,我遇到了同样的问题。

你能帮帮我吗?

你可以在这个链接上找到部署到tomcat(Tomcat 7)的war来发现问题:

https://www.wetransfer.com/downloads/dd1729b56d26e94b9d9a5dcb264dce0c20141105104229/a623a93ec2bcbb8b3ac8e2695cbe646c20141105104229/b4bc1e

您可以在此链接上找到代码源:

https://www.wetransfer.com/downloads/fd8a74c850a5beb32d6529576f15f42c20141105104405/6f89adba0c853d48e392edb1d3ca562620141105104405/f67f43

非常感谢。

最佳答案

我没有检查 wars,但这可能是 Tomcat 7 中默认打开的 session 固定问题。它基本上会在经过身份验证时更改 session ID。检查更多并尝试关闭以查看是否是您的问题 http://java.dzone.com/tips/turning-session-fixation

关于Java Servlet - 当 servlet 是安全的时不同的 JSESSIONID。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755318/

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