如何从这个过滤器获得响应?

时间:2010-09-25 07:12:47

标签: java servlets servlet-filters

调用以下servlet过滤器,但无法给出正确的响应。 我只是在过滤器内部循环。浏览器说,

The page isn't redirecting properly
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

ExpenseAuthenticationFilter.class

public class ExpenseAuthenticationFilter implements Filter {
public ExpenseAuthenticationFilter() {
    // TODO Auto-generated constructor stub
}

public void destroy() {
    // TODO Auto-generated method stub
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    try
    {
        HttpSession session = ((HttpServletRequest)request).getSession(false);

        if (session == null){
            System.out.println("Inside login Filter");
            ((HttpServletResponse) response).sendRedirect("ExpenseManagementLogin.html");
        }
    }
    catch (IllegalStateException ise){
        System.out.println("Session Not Yet Created");
    }

    chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
    // TODO Auto-generated method stub
}

 }

ExpenseAuthentication.class

public class ExpenseAuthentication implements Filter {
public ExpenseAuthentication() {
    // TODO Auto-generated constructor stub
}

public void destroy() {
    // TODO Auto-generated method stub
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException, IllegalStateException{
    try
    {
        HttpSession session = ((HttpServletRequest) request).getSession(false);
        if (session == null ){
            System.out.println("Management Filter");
            ((HttpServletResponse) response).sendRedirect("ExpenseManagementLogin.html");
        }

    }
    catch (IllegalStateException ise){
        System.out.println("Session Not Yet Created");
    }
    chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
    // TODO Auto-generated method stub
}

 }

Web.xml

<filter>
    <filter-name>ExpenseAuthentication</filter-name>
    <filter-class>com.pricar.hibernate.ExpenseAuthentication</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExpenseAuthentication</filter-name>
    <url-pattern>*/ExpenseDetailsManagement.html</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>ExpenseAuthenticationFilter</filter-name>
    <url-pattern>*/ExpenseManagementLogin.html</url-pattern>
</filter-mapping>

“http:// localhost:8080 / Hibernate / ExpenseDetailsManagement.html”的控制台日志

Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter
Inside login Filter

它实际上并没有进入ExpenseAuthentication.class,而是进入了ExpenseAuthenticationFilter.class并在其中循环。

任何建议!!

谢谢!

1 个答案:

答案 0 :(得分:3)

执行此操作时:

((HttpServletResponse) response).sendRedirect("ExpenseManagementLogin.html");

您将用户权限发送到“ExpenseManagementLogin.html”页面,该页面已使用ExpenseAuthenticationFilter进行过滤。

这是你的无限循环。

只要用户没有会话,它就会循环播放。由于过滤器正在自行循环,因此不会有任何会话 第二个过滤器也是如此。如果过滤器对需要自行过滤的路径执行sendRedirect。除非你有一些控件(这里是会话创建),否则你将有一个无限循环。

由于此过滤器仅适用于“ExpenseManagementLogin.html”,为什么要进行此重定向?