サイトフィルタ


——フィルターを使ってからずいぶん経ちましたが、今日はちょっとした問題があったので、ついでにフィルターについてのブログを書いて、自分の使用感を記録したいと思います.
実際,Filterはサーブレットと類似しており,FIlterのdoFilter()メソッドにはFilterChainのパラメータが1つ追加されており,このパラメータによりユーザの要求を実行するか否かを制御できる.ウェブサイトはフィルタが非常に便利で、フィルタを通じてこのユーザーがすでにログインしたかどうかをフィルタすることができて、ログインしていないならば、TAのアクセス権を制限して、しかもフィルタの設定と配置はすべて比較的に簡単です.次に、フィルタにログインするコードを使用して、フィルタの使用を簡単に説明します.
/**
 *     
 */

public class LoginFilter implements Filter {

	@Override
	public void destroy() {

	}
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest hsq = (HttpServletRequest)req;
		//  SESSION  loginUser  
		User user = (User)hsq.getSession().getAttribute("loginUser");
		if(user==null || "".equals(user)){
			//        ,             
			((HttpServletResponse)resp).getWriter().write("<script>window.parent.location.href='/index.jsp'</script>");
//			((HttpServletResponse)resp).sendRedirect("/index.jsp");
			
		}else{
			chain.doFilter(req, resp);
		}
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {

	}

}

 
上のこのフィルタは登録されていないすべてのユーザーをフィルタリングし、TAたちを登録ページにジャンプさせて登録します.このログインフィルタが機能するには、webが必要です.xmlファイルで構成するには、次の手順に従います.
<!--       -->
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.common.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/user/*</url-pattern>
  </filter-mapping>

         
ここでは、このユーザーアクセス/user/*の下のパスがこのフィルタを通過することを示します.ログインしていない場合、SESSIONにuserがない場合は、ログインページにジャンプします.複数のアドレスを構成する必要がある場合(SSMフレームワークでは各コントローラを構成する必要がある)、正しい構成方法は(N個同じ):
<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.common.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/user/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/abc/*</url-pattern>
  </filter-mapping>

上のフィルタの行にコメントされているコードに気づいたかどうか分かりませんが、通常はこのコードを使用してジャンプタスクを完了することができます.
((HttpServletResponse)resp).sendRedirect("/index.jsp");
次の行のコードは次のとおりです.
((HttpServletResponse)resp).getWriter().write("window.parent.location.href='/index.jsp'");
一番下の行のコードは私が今回出会った小さな問題を解決するためです.調整が必要なページはframesetフレームワークなので、フレームの下のどこかにジャンプするように定義されているリンクがたくさんあります.このように、上のジャンプを使用すると、局所的にジャンプし、あるべき効果が得られません.次の方法でjs世代コードを返し、実行し、全体的にジャンプしてこそ、効果を満たすことができます.