JavaWeb構成フィルタブロック要求による各種操作


フィルタはどんな機能を果たすことができますか?フィルタは、クライアントとサービス側の間にゲートを確立したように、クライアントからの要求は、このゲートを通過してからサービス側に入ってデータを取得する必要があります.このゲートは、1つのフィルタに相当し、1つ目のフィルタを介して2つ目のフィルタに到達することができ、順次後にフィルタをかけ、すべてのフィルタを通過してサービス側に要求することができます.この方法では,例えば,符号化フォーマットの設定,ログインユーザのフィルタリング,アクセス権限不足のユーザのフィルタリングなどの機能を行うことができる.  構成フィルタは、実際にはフィルタを実装するインタフェースであり、doFilter(request,response,chain)、init()、destroy()の3つの方法から書かれている.一般的にはdoFilterメソッドでフィルタ処理を行うだけです.他の2つの方法では、コードを書き換える必要はありません.  次は、ログインしていないユーザーが操作ページにアクセスすることを防止するために、ログインしたユーザーのパワーコードを簡単にフィルタリングします.
public class LoginRedirect implements Filter {
	@Override
	public void init(FilterConfig arg0) throws ServletException {
	}
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		//   
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		HttpSession session = request.getSession();
		//          :session              
		//               
		if (session.getAttribute("userid") == null) {//     
			String path = request.getRequestURI();
			if (path.indexOf("/Login.jsp") > -1 //        
					|| path.indexOf("/UserServlet") > -1) { 
				chain.doFilter(request, response); //   ,        
				return;
			} else {
				//    ,               
				response.sendRedirect(request.getContextPath() + "/jsp/Login.jsp");
				return;
			}
		} else {
			chain.doFilter(request, response); //   ,        
			return;
		}
	}
	@Override
	public void destroy() {
	}
}

  注意すべき点は2つあります.1つ目は、同じフィルタで1回だけローを実行することを保証できない場合は、各ローのコードの後にreturnを追加したほうがいいです.そうしないと、複数回の転送やジャンプに関する異常が報告される可能性があります.2つ目は、登録を必要とせずに操作できる項目がある場合があります.例えば、登録などの機能では、このような要求バックグラウンドの操作に対してフィルタをフィルタリングすることはできません.2つの方法が実現できます.1つはwebです.xmlにフィルタのフィルタの範囲を配置すると、もう1つは、ログインを必要とせずにバックグラウンドを要求する要求方法を1つのservletに配置し、このservletをフィルタしないでください.私の上のコードpathのように.indexOf("/UserServicelet")と同じです.  web.xmlでフィルタを構成するには、サーバがロード時にリスナー>フィルタ>サーブレットの順にロードされていることがわかります.
<filter>
	<filter-name>LoginRedirectfilter-name> 
	<filter-class>com.sanyitong.fliter.LoginRedirectfilter-class> 
filter>
<filter-mapping>
	<filter-name>LoginRedirectfilter-name>
	<url-pattern>/servlet/*url-pattern>  
filter-mapping>

  フィルタ構成の説明:は、プロジェクト内のフィルタクラスのパケットパスを示します.は、フィルタの役割を定義するオブジェクトまたは範囲です.構成には、次のルールがあります.
  • は、すべてのWebリソース:/*url-pattern>として機能します.クライアントが任意のリソースファイルにアクセスするように要求すると、フィルタによってフィルタされ、通過するとファイルにアクセスします.そうしないとブロックされます.
  • フォルダの下にあるすべてのファイルに作用します:/jsp/*url-pattern>
  • は、ある種類のファイルに作用する.拡張子url-pattern>.例えば.jsp url-pattern>は、jspファイルへのすべてのアクセス要求をフィルタします.
  • は、あるフォルダの下にあるタイプのファイル:/jsp/*に作用する.拡張子url-pattern>は最後に、1つのフィルタが複数の作用オブジェクトまたは範囲をフィルタする場合、複数のを構成してフィルタルールを定義し、1つのフィルタオブジェクトまたは範囲を定義します.

  • 最後に、フィルタが複数の作用オブジェクトまたは範囲をフィルタする場合は、フィルタルールを定義するために複数のを構成し、フィルタオブジェクトまたは範囲を定義します.