Servlet过滤器重定向,url没有改变

时间:2013-08-30 06:50:04

标签: java session servlets servlet-filters

我的身份验证过滤器出现问题。当过滤器重定向到登录页面时,所有上一页(主页面)都显示在登录页面中。 如果我手动进入登录页面,它可以正常工作。

这是我的过滤器:

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    HttpSession session = req.getSession(false);
    String loginURL = req.getContextPath() + SiteMap.LOGIN_CONTROLLER;
    boolean sessionCreated = session != null && !session.isNew();

    if (sessionCreated)
    {
        chain.doFilter(request, response);
    }

    else
    {
        res.sendRedirect(loginURL);

    }

我还注意到,当过滤器重定向到登录页面时,浏览器栏中的URL保持不变。主要问题是我从登录页面的其他页面获取内容。 不知道问题出在哪里。

3 个答案:

答案 0 :(得分:2)

在浏览器中更改URl并不依赖于过滤器,但这取决于您调用页面/ servlet的方式。您可以通过两种方式调用servlet / jsp

  1. RequestDispatcher:在同一请求下将控件转移给其他人(相同网址)

  2. Send Redirect:发起新请求(新网址)

    注意:所有过滤器都会对请求进行验证

答案 1 :(得分:0)

您传递的loginURL的价值是多少?发送相对路径。

答案 2 :(得分:-1)

我遇到了完全相同的问题。 真正的问题是我和你们都忘记添加以下行:

response.setContentType("text/html");

添加此行后,我的重定向工作正常。在此之前,我的servlet将继续使用 带有空白页面的同一页面(因为没有任何内容写入响应oputput流)。

希望这可以帮助其他有这个问题的人。在测试这种可能性之前,我花了一些痛苦的时间。