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 ファイルなどの Web アプリのリソースにアクセスできません。ご意見をお聞かせください

4

2 に答える 2

0

doFilter メソッドにパターン マッチを追加して、フィルタリングをスキップします。

.js や .css などのパターン マッチがあり、それらをスキップできます。

これも確認できます

于 2012-11-22T13:21:21.630 に答える
0

フィルタは -everything- にマップするように設定されています。おそらく、それを *.jsp のみにマップして、html ファイル、javascript ファイル、css ファイル、画像などの静的リソースに対して起動しないようにしたいでしょう。

于 2012-11-22T13:11:20.077 に答える