apache2.2チェーン問題


Javaのwebアプリケーションでは、web-infディレクトリの下のファイルがurlで直接アクセスできないほか、webapp rootの下のファイルはurlで直接または間接的にダウンロードできます.css image jsなどのファイルは、urlで直接他の人のjsをダウンロードするのはよくあることです.
jsなどのファイルのダウンロードはたまに現象で、サーバーに大きなプレッシャーをかけることはありませんが、mp 3、rmvbなどの大きなファイルはサーバーに大きなプレッシャーを与え、baidu google sogouなどの検索サイトの検索が他の人に大量にチェーンを盗まれた数が非常に大きいことに加え、これらのチェーンが多くの帯域幅を占め、サイト全体が遅くなります.では、どのようにして他人の鎖を盗むことを防ぐことができますか?
まず、Httpリクエストヘッダを紹介します.
refer、次の文で彼の値を取ることができます.
String referer = request.getHeader("referer");

referは何をしていますか?referは、前のページのurlを記録し、urlから直接ページにアクセスしたときのreferがnullであることを簡単に理解できます.
我々はreferの値を判断することによって、このお客様に私たちのリソースをダウンロードさせるかどうかを決定します.filterは簡単にこのタスクを完了することができます.簡単に次のコードで実現することができます.
public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = request = (HttpServletRequest) req;
		HttpServletResponse response = response = (HttpServletResponse) resp;
		String referer = request.getHeader("referer");

		if(referer == null || isLegalUrl(referer)){
			chain.doFilter(req, resp);	//  referer     
		}else{
			System.out.println("      ,    "); //            
		}
	}

簡単なフィルタはwebにあります.xmlで設定して、すぐにやってみましょう
<filter>
        <filter-name>ResourceAccessFilter</filter-name>
        <filter-class>com.redgateonline.daren.web.filter.ResourceAccessFilter</filter-class>
    </filter>
	<filter-mapping>
        <filter-name>ResourceAccessFilter</filter-name>
		<url-pattern>*.mp3</url-pattern>
    </filter-mapping>

2つのウェブappを起動してウェブapp 1のウェブapp 2で、ウェブapp 1の中で1つのハイパーリンクをプラスしてウェブapp 2のファイルをダウンロードします
<a href="http://localhost:8080/webapp2/sss.mp3">  </a>

OK準備ができたら「ダウンロード」をクリックします.の
驚いたことにダウンロードダイアログがポップアップされたが、ブロックが機能しなかったのか、出力を見てみた.

つまり、インターセプターが効いたので、ダウンロードダイアログの「保存」をクリックさせてもらったのですが、保存中に失敗するかもしれませんねへへへ
結果はがっかりした---保存に成功した.
に尋ねる
問題はどこですか.突然ファイルダウンロードダイアログのポップアップが私たちのプログラムによって制御されていないことを思い出して、だからもっと前の場所で要求をブロックすべきで、少なくともieあるいはieの前で自然にapacheを思い付くべきで、apacheは直接ポートに対して傍受するすべての要求が入ってきた後に出会った最初の関門はapacheで、すべてここで要求をブロックするのは間違いないはずです.間違いがあったら間違いなくやってみてください.
4階を参照