1

JSF、Hibernate、Springを使用してWebアプリケーションを作成しています。セッションをチェックするためのフィルターを追加しました。私のフィルターコードは:

public class AdminFilter implements Filter{

     private ArrayList<String> urlList;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
       String urls = filterConfig.getInitParameter("avoid-urls");
       StringTokenizer token = new StringTokenizer(urls, ",");   
       urlList = new ArrayList<String>();

        while (token.hasMoreTokens()) {
            urlList.add(token.nextToken());  
        }
    }

    // Checking if user is logged in
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
                HttpServletRequest req= (HttpServletRequest) request;
        HttpServletResponse resp= (HttpServletResponse) response;
        String url = req.getServletPath();
        HttpSession session =   req.getSession();
                if(!urlList.contains(url) && session.getAttribute("user")==null) 
                {
                    resp.sendRedirect(req.getContextPath() + "/backend/login/index.xhtml");

                }
          chain.doFilter(req, resp);
    }

    @Override
    public void destroy() {
       // throw new UnsupportedOperationException("Not supported yet.");
    }

}

フィルタのinitメソッドでは、ログインページ自体のように、セッションチェックをスキップする必要のある回避URLがいくつかあります。これは正しく機能していますが、このフィルターにより、CSS、画像、JSがログインページに読み込まれるように制限されています。私のフィルターの問題は何ですか?

4

2 に答える 2

3

ログインページにはいくつかのリソース(CSS、JS、画像)が必要です。これらは別のリクエストでブラウザからリクエストされ、フィルタによってインターセプトされます。リソースのリクエストをスキップするパラメータがないため(ログインページで使用されます)、このリクエストをブロックします

提案:

Spring-Securityを使用すると、作成に時間を費やすのではなく、構成によって多くの柔軟性が得られます。

于 2012-06-11T02:39:42.660 に答える
3

現在の構成に基づいて、現在、フィルターは、URLがcss、画像、またはその他のリソースをフェッチするためのものであるかどうかを無視しています。

boolean staticResources = (url.contains("css") || url.contains("images"));
if(!urlList.contains(url) && session.getAttribute("user")==null && !staticResources)  {
      resp.sendRedirect(req.getContextPath() + "/backend/login/index.xhtml");
}

これにより、静的コンテンツのセッションチェックが回避されます。

これを行うためのより良い方法は、レルムを使用するJavaEEWebセキュリティの一部として宣言型セキュリティを使用することです。

于 2012-06-11T02:39:51.653 に答える