1. ホーム
  2. Web プログラミング
  3. JSP プログラミング

サーブレット+jspでログインできないようにフィルタを実装する

2022-01-19 15:58:54

我々はしばしば、例えば、時には、我々は、ユーザーが操作ページの背景にアクセスするためにログインする必要はありませんしたくないし、そのような違法なアクセスは、システムが非常に危険になりますので、我々はしばしば他のページへのアクセスを許可するためにログインする必要があります、そうでなければ唯一のログインページが表示されます、もちろん、私のアイデア:この関数を使用することができます。

一つは、jspページでセッション判定を行い、ユーザーのセッションが存在しない場合は、ログインページにジャンプし、それ以外の場合はjspページのコードを実行しますが、あなたはロジックも単純であることがわかりますが、非常に面倒な、多くのjspがある場合、我々は複数の判断を記述しなければなりません。

その他は、ページにアクセスすると、ユーザーセッションが存在する場合は、ページにアクセスし、それ以外の場合はログインページのログインにジャンプ、セッションを保存し、他のページにアクセスし、検証するためにフィルタリングされているフィルタを使用することです。

以下は私の実装です。

package com.test.filter;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.Filter;
FilterChain; import javax.servlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http;
 
 
public class LoginFilter implements Filter {
  public static final String login_page = "/test/admin/index.jsp";
 public static final String logout_page = "/test/admin/Public/login.jsp";
 public void destroy(){
 
 }
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
 HttpServletRequest request = (HttpServletRequest)servletRequest;
 HttpServletResponse response = (HttpServletResponse)servletResponse;
 String currentURL = request.getRequestURI();
 String ctxPath = request.getContextPath();
 // access the current path of the page when the item name is removed
 String targetURL = currentURL.substring(ctxPath.length());
 HttpSession session = request.getSession(false);
 //judge the current page, if the current page is not the login page
 if(! ("/admin/Public/login.jsp".equals(targetURL))){
 System.out.println("1"+targetURL+"ctxPath:"+ctxPath+"currentURL:"+currentURL);
 // in not for the landing page, then judge, if not the landing page also no session then jump to the login page
 if(session == null || session.getAttribute("admin") == null){
 response.sendRedirect(logout_page);
 return;
 }else{
 // This means it is correct and will go to the next chain, if it does not exist, then do the normal page jump
 filterChain.doFilter(request, response);
 return;
 }
 }else{
 // This means if the current page is a landing page, jump to the landing page
 filterChain.doFilter(request, response);
 return;
 }
 
 }
 public void init(FilterConfig filterConfig)throws ServletException{
 
 }
 
}


次に、web.xmlで設定します。

<filter>
 <filter-name>LoginFilter</filter-name>
 <filter-class>com.test.filter.LoginFilter</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>LoginFilter</filter-name>
 // This means that it is valid for all files with jsp suffix, but not for others
 <url-pattern>*.jsp</url-pattern>
</filter-mapping>


すると、このように機能が実装されます。

以上が今回の記事の内容ですが、皆様の学習のお役に立てれば幸いです。また、BinaryDevelopをより支持していただけると幸いです。