0

我正在尝试学习过滤器的使用。我通过指定这样的 url-pattern 创建了一个应用程序范围的过滤器:

<filter>
    <display-name>AuthenticationFilter</display-name>
    <filter-name>AuthenticationFilter</filter-name>
    <filter-class>learn.filters.AuthenticationFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AuthenticationFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

我已将 welome-file 设置为:

<welcome-file-list>
       <welcome-file>/WEB-INF/jsp/home.jsp</welcome-file>
</welcome-file-list>

我的 doFilter 代码如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req=(HttpServletRequest)request;
    HttpServletResponse res=(HttpServletResponse)response;
    String username=(String)req.getSession().getAttribute("username");
    if(username==null && req.getParameter("username")==null){
        req.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
    }else{
        String user=req.getParameter("username");
        String pass=req.getParameter("password");
        if(user==null){
            req.getRequestDispatcher("/WEB-INF/jsp/home.jsp").forward(request, response);
        }else{
            if(user.equals(pass)){
                req.getSession().setAttribute("username", user);
                res.sendRedirect("home");
            }
        }
    }

此代码工作正常并验证用户,但我的 login.jsp 页面上的任何额外资源(如 js 文件)都不会导入,因为每个请求都会返回登录页面。这意味着如果用户未通过身份验证,我将无法访问我的网络应用程序的任何资源,例如验证码、js、css 文件。请指教

4

2 回答 2

0

过滤器设置为映射到 -everything-。也许您只想将它​​映射到 *.jsp,这样它就不会触发静态资源,如 html 文件、javascript 文件、css 文件、图像等。

于 2012-11-22T13:11:20.077 回答
0

在您的 doFilter 方法中添加模式匹配以跳过过滤。

您可以为您的 .js 和 .css 等进行模式匹配并跳过它们。

你也可以检查一下

于 2012-11-22T13:21:21.630 回答