【问题标题】:Is it safe to redirect a user browser using c:redirect?使用 c:redirect 重定向用户浏览器是否安全?
【发布时间】:2012-02-02 22:17:50
【问题描述】:

我正在检查用户的登录状态(权限),如果他没有访问特定 .jsp 页面的正确权限,我想将他重定向到另一个页面。

使用安全吗

<c:redirect> 

来自 JSTL?用户会被 100% 重定向还是可能会收到我的 jsp 页面的 html 输出?

在 php 中,为了确定,我会放置一个 exit();在 HEADER 重定向之后。但是,由于我将 MVC 与 asp 和 servlet 一起使用,因此我不想将 Java 放在我的 .jsp 页面中。

【问题讨论】:

标签: java servlets jstl


【解决方案1】:

我正在检查用户的登录状态(权限),如果他没有访问特定 .jsp 页面的正确权限,我想将他重定向到另一个页面。

规范的方法是为此使用 servlet Filter。您需要将这些受限页面分组到一个通用 URL 模式后面,例如/app/*/secured/*/private/* 或其他任何东西,然后将 Filter 映射到该 URL 模式上,该模式在 doFilter() 方法中大致执行以下操作(假设您将登录用户存储在以通常的方式进行会话)。

@WebFilter("/app/*")
public class AuthenticationFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        if (req.getSession().getAttribute("user") != null) {
            // User is logged in, so just continue request.
            chain.doFilter(request, response);
        } else {
            // User is not logged in, so redirect to some index/login page.
            res.sendRedirect(req.getContextPath() + "/login.jsp");
        }
    }

    // ...    
}

这使 JSP 免受复制粘贴的混乱和变通方法的影响,以防止在重定向之前提交响应。

【讨论】:

  • 谢谢,这正是我想要的!
【解决方案2】:

如果您使用 MVC,则不应在 JSP 中使用 JSTL 进行重定向。并不是说它不起作用,而是视图不负责发出重定向。这是控制器的责任。

如果响应的某些部分已被刷新,则从 JSP 重定向可能会失败。

在控制器 servlet 中使用response.sendRedirect()

【讨论】:

  • 嗯,我不确定:如何在没有用户对表单进行操作的情况下调用请求中带有某些参数的 servlet?另外:“如果响应的某些部分已被刷新,则从 JSP 重定向可能会失败。”这是什么意思?用户会看到页面的内容吗?当然重定向是放在 .jsp 文件的头部...
  • MVC 架构的要点是让每个请求都由一个控制器处理,用 Java 编写,然后让这个控制器分派到一个视图,由 JSP 实现。如果那不是您正在做的事情,那么您就没有使用 MVC。使用 c:redirect 作为 JSP 所做的第一件事,您应该没有任何问题。为什么不测试呢?
  • 是的,当然我已经测试过它并且它可以工作,但我不确定如果用户有恶意或者在生成过程中服务器上发生错误,这是否是一种安全的方法这页纸。它看起来很安全吗?
【解决方案3】:

如果您进行重定向,如果您正在打印,用户可以看到 HTML 输出。更好的方法是在用户无法看到任何输出的情况下使用 forward。

【讨论】:

  • 在页面开头使用JSTL中的,会让.jsp页面的整个html可见吗?
  • 这取决于响应速度。但很有可能整个页面都是可见的。
  • 你确定吗?我不是在谈论 ,我是在谈论使用来自 JSTL 的
  • 是的。更多信息您可以找到Here。在该页面中搜索请求重定向
  • 你是对的。非常感谢。现在我使用 (这将更改用户浏览器页面),然后是 。 .jsp文件中forward之后的每一行都不会被处理。
猜你喜欢
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多