当用户使用 Spring Security 登录到我的 web 应用程序时,他会被重定向到某个 JSP 网页,并且他的用户上下文处于 Activity 状态(登录 session )。现在,在此页面上,单击链接或按钮后,我想在同一网页上向他显示来自另一个 URL 的已解析 JSON 数据,但是当我使用 JSON 数据访问此页面时:
reader = new BufferedReader(new InputStreamReader(url.openStream()));
在不使用他的 session 的情况下访问这个带有 JSON 的页面,并且无法访问 JSON 数据。
总而言之,我的问题是:如何在同一个当前用户(Spring Security) session 中使用JSP访问另一个网页?
最佳答案
当您从浏览器访问 JSP 或 Servlet 时,您的浏览器和 Web 应用程序之间会存在一个 session 。
但是,您在这里从 Java 代码打开 URLConnection 所做的事情(无论此代码是在 JSP 中还是在 Servlet 中,在运行时都是相同的)是从服务器本身请求资源到同一服务器中的资源。就是这样,您的 Java 代码正在打开一个到服务器的新 session 。由于您请求的 JSON 取决于 session (这就是您所说的),因此回复会有所不同。
如果您在 session 管理中有一种管理器应用程序(例如 Tomcat 的 psi-probe),您可以看到应用程序上下文中至少有两个 Activity session ,一个用于浏览器 session ,另一个用于与服务器 JSON 资源的 Java 连接。
如果您确实需要从浏览器调用 jsp 时使用的同一 session 中获取该 json,则可以使用 javascript 从中访问该 JSON 资源。还有其他替代方案,例如直接调用通过 java import 返回 JSON 资源的 Java 类,而不是将其作为 URL 调用。
关于java - 在 JSP 中链接不同的页面并保留当前的 Spring Security session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39326123/