- PR -

Webアプリケーション filter使用時の処理について

1
投稿者投稿内容
linx
会議室デビュー日: 2006/02/02
投稿数: 9
投稿日時: 2006-05-18 21:04
Struts1.2.7およびTomcat5.5.15を使用してWebアプリケーションを作成しています。
filterクラスを使用して以下のようなログイン状況の処理を行おうと思います。

アクセスしてきたユーザのログイン状況を調べ、
1.ログイン済みならばリクエストしてきたページを表示する
2.ログイン済みでなければログインページを表示する

しかし、以下のようにfilterを作成するとログインページは表示されますが、そのページで使用している画像などは表示されません。
画像取得のリクエストをサーバに送った場合にもログインページへのフォワード処理が実行されて画像などの情報がクライアントに返されないためと思われます。
現在はgetRequestURL()でリクエストのURLを取得して".do"の文字を含むURLの場合にのみフォワード処理をさせていますが、みなさんはどのように処理していますか?
他にいい方法があれば教えてください。

------------web.xml--------------

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>MyFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


--------------MyFilter.java---------------------

import java.io.*;
import javax.servlet.*;

public class MyFilter implements Filter
{
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)

throws IOException, ServletException
{

//sessionからログイン情報取得
HttpSession session = ((HttpServletRequest)request).getSession(true);
String LOGIN_FLAG = (String)session.getAttribute("LOGIN");

//ログイン済みの場合はそのまま処理続行
if(LOGIN_FLAG != null && LOGIN_FLAG.equal("LOGIN");
chain.doFilter(req, res);

//ログイン済みでない場合はログインページへ
else
{

RequestDispatcher rd = request.getRequestDispatcher("/login_page.do");
rd.forward(request, response);

}
}

public void init(FilterConfig config) throws ServletException
{
}

public void destroy()
{
}
}
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-05-18 22:11
引用:

linxさんの書き込み (2006-05-18 21:04) より:
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>



全てのURLではなくて、*.doをフィルタの対象のURLとすればいいのではないでしょうか。
linx
会議室デビュー日: 2006/02/02
投稿数: 9
投稿日時: 2006-05-18 23:12

返信ありがとうございます。
なるほど、、そうですね。気づきませんでした。。
ずっとクラス内で処理させようとしてましたので盲点でした。。。
ありがとうございます!


[ メッセージ編集済み 編集者: linx 編集日時 2006-05-18 23:13 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-05-19 09:20
フィルタで画面表示する際は画像のURLの指定方法に注意してください。
URLが階層になっているときに相対パスだと失敗することがあります。

/hoge/index.do ← アクセスしたURL
<img src="image/hoge.jpg"> ← 画像への相対パス
/hoge/image/hoge.jpg ← 対象となる画像

失敗例)
/hoge/piyo/index.do ← アクセスしたURL
/hoge/piyo/image/hoge.jpg ← 対象となる画像 (階層が違う!)

linkタグでのcssファイルやjsファイルの指定なども注意が必要です。
Filterから出力するページで外部リソースを含む場合は
絶対パスで扱うのが無難でしょう。

# Webシステムの設計はURLをどうするかでまず悩む
1

スキルアップ/キャリアアップ(JOB@IT)