使用c:redirect重定向用户浏览器安全吗?

问题描述:

我正在检查用户的登录状态(权限),如果他没有访问特定.jsp页面的正确权限,我想将他重定向到另一个页面。使用c:redirect重定向用户浏览器安全吗?

是可以安全使用

<c:redirect> 
从JSTL

?用户是否会以100%重定向,或者他可能会收到我的jsp页面的html输出?

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

+0

前进怎么样? http://stackoverflow.com/questions/2591918/java-servlet-difference-between-send-redirect-and-forward-in-servlets – HRgiger 2012-02-02 22:40:51

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

的典型方法是使用一个servlet Filter这一点。您需要将这些受限制的网页分组在通用网址格式后面,例如/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免受复制过程中的混乱和解决方法,以防止在重定向之前提交响应。

+0

谢谢,那就是我一直在寻找的! – Bedo 2012-02-05 22:21:45

+0

不客气。 – BalusC 2012-02-05 22:52:31

如果您使用的是MVC,则不应在JSP中使用JSTL完成重定向。并不是说它不起作用,但发布重定向仅仅是视图的责任。这是控制器的责任。

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

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

+0

嗯我不知道这个:我怎样才能调用一些参数的servlet在没有用户操作的表单中请求? Plus:“如果响应的某些部分已被刷新,则从JSP重定向可能会失败。”这是什么意思?用户将看到页面的内容?当然,重定向被放在.jsp文件的头部...... – Bedo 2012-02-02 22:56:20

+0

MVC体系结构的要点是让每个请求都由控制器处理,用Java编写,然后将此控制器分派到一个视图,由一个JSP。如果这不是你正在做的,那么你没有使用MVC。把c:redirect作为JSP的第一件事情,你不应该有任何问题。为什么不测试它? – 2012-02-02 23:03:55

+0

是的,当然,我已经测试过它,它的工作原理,但我不确定如果用户有恶意的意图或在页面生成期间服务器上发生错误,这是否安全。 它看起来相当安全吗? – Bedo 2012-02-02 23:14:41

如果您执行重定向,则用户可以在打印时看到HTML输出。如果用户无法看到任何输出,则可以使用更好的方法。

+0

从页面开头的JSTL使用,会让整个.jsp页面的html变得可见吗? – Bedo 2012-02-02 23:00:15

+0

这取决于响应速度。但有可能整个页面都可见。 – 2012-02-02 23:01:39

+0

你确定吗?我不是在谈论,我正在谈论使用JSTL的。 – Bedo 2012-02-02 23:15:46