会话筛选重定向问题

时间:2012-12-16 22:50:58

标签: java session java-ee servlet-filters

我在java web中遇到AccessFilter问题。当我调用/main.jspx时,它会重定向到login.jsp。但是当我尝试登录时出现了一些错误

public class AccessFilter implements Filter {

    private FilterConfig filterConfig;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpSession session = ((HttpServletRequest) request).getSession();
        HttpServletResponse res = (HttpServletResponse) response;
        Client client = (Client) session.getAttribute("client");        
        if (client != null) {
            chain.doFilter(request, response);
        } else {
            RequestDispatcher dispatcher = request.getRequestDispatcher(
                    ConfigurationManager.getInstance().getProperty(ConfigurationManager.LOGIN_PAGE_PATH));
            dispatcher.forward(request, response);
        }
    }

    @Override
    public void destroy() {
        this.filterConfig = null;
    }

}

的web.xml:

<filter>
    <filter-name>AccessFilter</filter-name>
    <filter-class>ua.kpi.shop.filter.AccessFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>AccessFilter</filter-name>
    <url-pattern>/jsp/main.jspx</url-pattern>
    <url-pattern>/jsp/pokemons.jspx</url-pattern>
</filter-mapping>

错误: HTTP状态404 - /PokemonsShop/login.jspx

输入状态报告

message /PokemonsShop/login.jspx

说明请求的资源不可用。

2 个答案:

答案 0 :(得分:0)

filterConfig.getServletContext().getRequestDispatcher采用绝对路径而不是request-getRequestDispatcher。虽然这是否是我不能说的解决方案。

答案 1 :(得分:0)

看到你的信息后,有两件事情发生了: 1)您是否检查客户端对象是否为空?可能在执行登录操作(方法)时,您没有正确设置客户端进入会话? 2)在服务器错误中,它显示“未找到/PokemonsShop/login.jspx”,但在您的过滤器映射中,您提到/ jsp / xxx。是因为您的登录页面位于文件夹jsp下,并且您正在重定向(在过滤器中)到/PokemonsShop/login.jspx,它应该在webapp根文件夹下可访问。 希望他们中的一个能够提供帮助