javax.servlet.Filter運用

6417 ワード

Servlets FilterはServlet 2.3仕様で新たに増加したもので、ユーザからクライアントからの要求を傍受し、アクセスが必要なリソースにまだ到達していないときに実行するクラスです。クライアントからの要求を操作し、リソースがまだ最初にクライアントに送信されていない前に応答を傍受し、これらを処理してまだクライアントに送信されていない応答。
Filtersには多くのアプリケーションがあります。Servlet 2.3仕様は、以下のところにFilterを適用することができると提案しています。
authentication filters
loging and audiiting filters
イメージconversion filters
data commpression filters
encryption filters
tokenizing filters
filters that trigger resource access events
XSL/T filters that transform XML content
MIME-type chain filters
例:
package jasso.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterCharin;
import javax.servlet.FilterConfig;
import javax.servlet.Servlet Exception
import javax.servlet.Servlet Request;
import javax.servlet.Servlet Resonse;
/**

*@author
*/
public class Set CharcterEncocdingFilter implement Filter{
prvate String encoding;
/**
*Called by the web container to indicate to a filter that it is being
*Taen out of service.

*@todo Implement this javax.servlet.Filter method
*/
public void destroy(){
)
/**
*The doFilter method of the Filter is caled by the
*container each time a request/reponse pair is passed through the chain
*due to a client request for a reourcere at the end of the chain.

*@param request
*Servlet Request
*@パラムレス
*Servlet Resonse
*@param chain
*FilterCharin
*@throws IOException
*@throws Servlet Exception
*@todo Implement this javax.servlet.Filter method
*/
public void doFilter(Servlet Request request、Servlet Resonse)
FilterCharin chain)throws IOException、Servlet Exception{
request.set CharcterEnccoding;
chain.doFilter(request、reponse);
)
/**
*@see javax.servlet.Filter胫init(FilterConfig)
*/
public void init(FilterConfig config)throws Servlet Exception{
encoding=config.get Init Parameter(「encoding」);
)
)
web.xml部分
……
encodingFilter
my.web.filter.Set CharcterEnccodingFilter
encoding
ShiftJIS
encodingFilter
action
action
org.apache.struts.actions.Activlet
config
//WEB-INF/config/struts-config.xml、/WEB-INF/config/struts-configs.xml
debug
2
detail
2
1
------------------------------
javax.servlet.filterの使い方
フィルタはどうやって実現しますか?
1.所在するクラス実現Filterインターフェース
public interface Filter
public void init(FilterConfig filterConfig)throws Servlet Exception
フィルタ初期化は、コンテナ起動時に自動的に初期化されます。
public void doFilter(Servlet Request request、Servlet Resonse reponse、FilterChin chain)throws IOException、Servlet Excepton
標準ServletにおけるdoGetまたはdoPost方法では、伝達パラメータは、HttpServletRequest、HttpServletReponseである。
フィルターの廃棄
public void destroy()
package cn.mldn.lxh.filter
import java.io.*;
import javax.servlet.*;
public class First Filter implements Filter
{
public void init(FilterConfig config)throws Servlet Exception
{
System.out.println(「フィルタ初期化」)
)
public void doFilter(Servlet Request request、Servlet Resonse reponse、FilterChin chain)throws IOException、Servlet Exception
{
System.out.println(フィルタリングdoFilter);
)
public void destroy()
{
System.out.println(フィルタ廃棄)
)
)
web.xmlファイルの設定
ファースト
cn.mldn.lxh.filter.First Filter
ファースト
servletのurl-patternとは違って、ここではそのページをフィルタリングし、すべてをフィルタリングすれば、*」となります。
/*
フィルタが目的地にコンテンツを転送するためには、FilterCharinが必要であり、転送の継続を要求します。
フィルタも二回実行します。FilterCharinはこの前に一回実行してからもう一度実行します。
1.不正なテキストをフィルタする:
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
public class Char Filter implements Filter
{
public void init(FilterConfig filterConfig)throws Servlet Exception
{
//System.out.println(「init」)
)
public void doFilter(Servlet Request request、Servlet Resonse reponse、FilterChin chain)throws IOException、Servlet Exception
{
String c.get Parameeter(「content」);
//indexOfが-1に戻ると、必要な内容が見つからないということです。
if(content!=null)
if(content.indexOf(「AAA」)==-1)
{
chain.doFilter(request、reponse);
)
ese
{
System.out.println(「不正な文字がある」)
//必要であれば、ここでもRequest Displatchを使ってジャンプできます。
)
)
else
{
chain.doFilter(request、reponse);
)
)
public void destroy()
{
//System.out.println(「フィルタ廃棄」);
)
char
cn.mldn.lxh.filter.hard Filter
char
/*
2.内容を統一的に符号化する
set CharcterEncocding(「GB 2312」)
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
public class EnccodingFilter implements Filter
{
public void init(FilterConfig filterConfig)throws Servlet Exception
{
//System.out.println(「フィルタ初期化」)
)
public void doFilter(Servlet Request request、Servlet Resonse reponse、FilterChin chain)throws IOException、Servlet Exception
{
try{
request.set CharcterEnccoding(「GB 2312」)
)
catch(Exception e)
{}
chain.doFilter(request、reponse);
)
public void destroy()
{
//System.out.println(“廃棄”);
)
)
encoding
encoding
/*
3.ログイン検証
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Loging Filter implements Filter
{
public void init(FilterCoinfilterConfig)throws Servlet Exception
{
//System.out.println(「フィルタ初期化」)
)
public void doFilter(Servlet Request request、Servlet Resonse reponse、FilterChin chain)throws IOException、Servlet Exception
{
//Sessionはhttpカテゴリーに属し、ServletRequestオブジェクトをHttpServletRequestオブジェクトに変換する必要があります。
HttpServlet Request req=(HttpServletRequest)request;
Http Session session=req.get Session()
//sessionが空でない場合は、他のページを閲覧できます。
if(session.get Attribute("uname")!=null)
{
chain.doFilter(request、reponse);
)
else
{
//request Displatchを通じて登録面にジャンプする
request.get Request Disp patch(「logine.jsp」).forward(request,reponse);
)
)
public void destroy()
{
//System、out.println(“廃棄”);
)
)
ロゴ
cn.mldn.lxh.filter.Loging Filter
パラメータ名
パラメータ値
ロゴ
/*
web.xmlのパラメータを読み取る方法:
public void init(FilterConfig arg 0)throws Servlet Exception{
Stringパラメータ値=arg 0.get Init Parameeter(「パラメータ名」)
)