メインページのアクセス制御
関連する技術知識ポイント
フィルタ
フィルタ
-
WEBアプリケーションの場合、フィルターはサーバーに常駐するWEBコンポーネントであり、クライアントとWEBリソース間の要求および応答情報をインターセプトできます。WEBリソースには、サーブレット、JSP、HTMLページなどが含まれる場合があります。
-
サーバーは特定の要求を受信すると、最初にその要求をフィルターに渡します。プログラマーは、フィルター内の要求情報を読み取って変更してから、要求情報をターゲットリソースに送信できます。ターゲットリソースが応答した後、サーバーは応答をフィルターに再度転送します。フィルターでは、応答情報に対していくつかの操作を実行してから、サーバーに応答を送信することもできます。
-
つまり、フィルターは、WEBリソースが要求を受信する前、およびブラウザーが応答を受信する前に、要求および応答情報に対して対応する操作を実行できます。
-
複数のフィルターをWEBアプリケーションにデプロイできます。複数のフィルターがフィルターチェーンを形成します。要求と応答は、ターゲットに到達する前に複数のフィルターを通過する必要があります。
- ブラウザリクエストはフィルタ1、2、3で処理された後、サーブレット処理に入ります。処理が完了すると、同じようにブラウザに戻ります。つまり、3、2、1から戻ってきます。サーブレットから。
フィルタの使用
- Filterインターフェースを実装することにより、完全なフィルター開発
@WebFilter(filterName = "LoginFilter",urlPatterns = "/*")
public class LoginFilter implements Filter {
public void destroy() {
System.out.println("LoginFilter 过滤器摧毁了......");
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
}
public void init(FilterConfig config) throws ServletException {
System.out.println("LoginFilter 过滤器初始化了......");
}
}
- フィルタは、上記のコードのように注釈で構成できます。また、xmlファイルでも構成できます。次のように:
- ここでは、login.jspページが正常にログインした場合にのみ、main.jspページに入りたいと思います。そうでない場合、main.jspに直接入ることができないため、main.jspページをフィルタリングする必要があるため、url = patternを記述できます。 as / main.jspここに/ *を入力して、すべてのインターフェイスを除外します。フィルタ条件は、フィルタクラスで実装できます。フィルタ条件は、実際にはdoFilterで実装されます。コードは次のとおりです。
@WebFilter(filterName = "LoginFilter",urlPatterns = "/*")
public class LoginFilter implements Filter {
public void destroy() {
/*初始化成功在控制台输出*/
System.out.println("LoginFilter 过滤器摧毁了......");
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
System.out.println("URI:"+request.getRequestURI());
System.out.println("URL:"+request.getRequestURL());
String url = request.getRequestURL().toString();
/*判断过滤的要求*/
if(url.endsWith("/main.jsp")){
/*如果没有登陆就想直接进入主页面,那么就过滤跳转到登录界面*/
response.sendRedirect("login.jsp");
}else{
/*如果直接进入的不是主页面,那么就放行*/
chain.doFilter(request, response);/*保证使用的是同一个request,response对象*/
}
}
public void init(FilterConfig config) throws ServletException {
/*销毁之前在控制台输出*/
System.out.println("LoginFilter 过滤器初始化了......");
}
}
このようにして、フィルター条件が実現されます。
メインページのアクセス制御要件
-
メインページに入るときにログイン状態を判断する必要があります。ログインしていない場合は、メインインターフェースに入ることができません。
-
ログインステータスの判断は、より用途が広くプラグイン可能なフィルターに実装されています。