【问题标题】:Can I access session variables stored by spring mvc from js front end我可以从js前端访问spring mvc存储​​的会话变量吗
【发布时间】:2013-01-06 16:09:51
【问题描述】:

我阅读了关于堆栈溢出的另一个答案,其中解释了 spring mvc 从 jsp 页面存储的会话变量的使用。

我想知道的是,对于使用 spring 作为后端的 Web 应用程序,我可以从 HTML 前端中的 JavaScript 代码访问此类会话变量吗?如果是,那么如何从 JavaScript 访问会话变量?

【问题讨论】:

    标签: java javascript spring session


    【解决方案1】:

    不,不直接。

    假设会话变量存在于 服务器 的内存中,而 JavaScript 在 客户端 的浏览器中执行。一旦清楚这一点,您也应该清楚为什么不能在客户端 JavaScript 中直接访问会话变量。

    如果您需要在 JavaScript 代码中读取会话变量,有一些方法可以解决。

    1. 您可以将值呈现为页面上的 JavaScript 变量
    2. 您创建了一个简单的 AJAX 服务 (REST/JSON),以便您的页面可以使用 JavaScript 中的 AJAX 向服务器发出请求并取回会话变量值

    【讨论】:

    • 在您的回答中参考第 2 点,这样的服务不能被黑客轻易滥用吗?您还可以为我的两个观点指出一些示例代码吗?谢谢
    【解决方案2】:

    您必须遍历会话变量并打印出一个脚本,该脚本将会话属性设置为数组。

    例如在你的jsp代码中:

    添加以下行

    <script>
    var session= new Array();
    <%
    for (Enumeration e = session.getAttributeNames() ; e.hasMoreElements() ;) {
         Object obj= e.nextElement();
         %>session['<%=obj%>']='<%=(String)session.getAttribute(obj)%>';<%
       }
    %>
    </script>
    

    这是假设您的会话属性是字符串。

    现在您可以在浏览器 javascript 中访问会话属性

    例如:session['key1'] 将给出与服务器中 key1 对应的 Session 属性的字符串表示形式。

    【讨论】:

    • 您意识到您在示例中的每个循环中调用 e.nextElement() 两次,对吧?
    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多