【问题标题】:cannot access page directly from url jsp/servlet无法直接从 url jsp/servlet 访问页面
【发布时间】:2023-03-05 10:57:01
【问题描述】:

我的任务是解决此现有 Web 应用程序上的此错误,但我不熟悉 jsp/servlet。当用户登录时,他/她将能够访问所有模块,但有一个特定模块无法直接从 url 访问(在逻辑上应该可以)但如果不能直接从 url 访问,则可以访问.它总是重定向到受限警告。

任何想法为什么?我已经检查了 web.xml 上的 url 映射,应该没有问题。我猜是因为只有这个模块在 servlet 和 jsp 文件中有这个 http 会话。

HttpSession RSession = request.getSession();
if(!"yesdirect".equals(RSession.getAttribute("vdirect"))){

    if(!"yesdirect".equals(request.getParameter("vdirect"))){
        response.sendRedirect("PermissionRestricted.jsp");
    }       
    else{
        RSession.setAttribute("vdirect", "yesdirect");  
    }
}

任何想法或见解将不胜感激。可能代码有问题或其他什么?

谢谢。

【问题讨论】:

  • 好吧,我猜参数vdirect 没有设置。当你直接从带有参数集的浏览器调用它时会发生什么?
  • 你的意思是如果直接调用参数“vdirect”?
  • 抱歉。显示我是多么缺乏经验。当使用参数集直接调用时,也会将其重定向到受限警告。我忘了提到当用户第一次登录网络时会发生这种情况。如果用户在访问问题模块之前点击了其他模块,则可以通过url访问。
  • 我怀疑这需要在会话以及查询字符串中设置参数。

标签: java jsp servlets


【解决方案1】:

请使用 toString() 更改代码

HttpSession RSession = request.getSession();
if (!"yesdirect".equals(RSession.getAttribute("vdirect").toString())) {

    if (!"yesdirect".equals(request.getParameter("vdirect").toString())) {
        response.sendRedirect("PermissionRestricted.jsp");
    } else {
        RSession.setAttribute("vdirect", "yesdirect");
    }
}

【讨论】:

  • 如果在会话中设置的原始变量是字符串,则不需要这样做。如果原始变量不是字符串,则此相等性检查将始终失败。所以我认为toString() 不会有帮助。
  • 如果 vdirect 不在会话中,我希望你现在会得到一个空指针异常
猜你喜欢
  • 2016-06-28
  • 2016-02-03
  • 2014-10-16
  • 2017-11-22
  • 2011-11-09
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多