servlet+jsp實現過濾器,防止使用者未登入訪問
我們可能經常會用到這一功能,比如有時,我們不希望使用者沒有進行登入訪問後臺的操作頁面,而且這樣的非法訪問會讓系統極為的不安全,所以我們常常需要進行登入才授權訪問其它頁面,否則只會出現登入頁面,當然我的思路:
一種是在jsp頁面進行session的判斷,如果不存在該使用者的session,就跳轉到登入頁面,否則執行jsp頁面程式碼,但是你會發現這樣做邏輯也簡單,但是非常麻煩,如果有很多個jsp,那麼就要寫多個判斷
另一種則是利用過濾器,訪問頁面時都進行過濾驗證,如果存在該使用者session,則訪問該頁面,否則跳轉到登陸頁面登入,儲存session後訪問其它頁面
一下是我的實現
package com.test.filter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
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();
//除掉專案名稱時訪問頁面當前路徑
String targetURL = currentURL.substring(ctxPath.length());
HttpSession session = request.getSession(false);
//對當前頁面進行判斷,如果當前頁面不為登入頁面
if(!("/admin/Public/login.jsp".equals(targetURL))){
System.out.println("1"+targetURL+"ctxPath:"+ctxPath+"currentURL:"+currentURL);
//在不為登陸頁面時,再進行判斷,如果不是登陸頁面也沒有session則跳轉到登入頁面,
if(session == null || session.getAttribute("admin") == null){
response.sendRedirect(logout_page);
return;
}else{
//這裡表示正確,會去尋找下一個鏈,如果不存在,則進行正常的頁面跳轉
filterChain.doFilter(request, response);
return;
}
}else{
//這裡表示如果當前頁面是登陸頁面,跳轉到登陸頁面
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>
//這裡表示對所有的以jsp字尾的檔案有效,其它的無效
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
那麼,這樣功能就實現了相關文章
- Web訪問登陸過濾器控制Web過濾器
- 通用的使用者登入過濾器(SessionFilter)過濾器SessionFilter
- struts2.0攔截器(實現未登入的使用者不能訪問系統的頁面)
- 【SSO】--單點登入之過濾器(filter)過濾器Filter
- asp.net mvc中的使用者登入驗證過濾器ASP.NETMVC過濾器
- 布隆過濾器實戰【防止快取擊穿】過濾器快取
- 使用filter_var()過濾表單,實現laravel登入介面FilterLaravel
- .net core 登入全域性驗證過濾器過濾器
- Java Web防止使用者重複(同一使用者同時)登入實現方式JavaWeb
- 在CentOS中配置VNC實現遠端登入訪問CentOSVNC
- PHP實現布隆過濾器PHP過濾器
- Vue學習:實現使用者沒有登陸時,訪問後自動跳轉登入頁面Vue
- 登入過期--localStorage加sessionStorage實現7天登入過期Session
- 使用MySQL驗證OpenVPN使用者登入訪問MySql
- Spring Cloud Gateway ---GatewayFilter過濾器、過濾器工廠(入門)SpringCloudGatewayFilter過濾器
- Java Web實現使用者登入功能JavaWeb
- 訪問使用者中心實現認證
- Go語言實現布穀鳥過濾器Go過濾器
- 詳解布隆過濾器原理與實現過濾器
- 實現布隆過濾器的三種方式過濾器
- 過濾器實現檔案的gzip壓縮過濾器
- 布隆過濾器(Bloom Filter)的java實現過濾器OOMFilterJava
- 【Struts2】:攔截器實現方法過濾
- SpringBoot實現過濾器、攔截器與切片Spring Boot過濾器
- Asp.net中防止使用者多次登入的方法ASP.NET
- 【轉】允許遠端使用者登入訪問mysql的方法MySql
- 海量使用者註冊整合布隆過濾器實現使用者名稱唯一功能過濾器
- K8Sdashboard登入問題(chrome無法訪問以及使用使用者名稱和密碼登入)K8SChrome密碼
- 過濾Servlet--過濾器Servlet過濾器
- Laravel 實現 passport 使用者註冊登入LaravelPassport
- laravel 實現多使用者體系登入Laravel
- 【過濾器】web中過濾器的使用與亂碼問題解決過濾器Web
- 一起來實現單使用者登入 —— 功能實現
- 詳解布隆過濾器的原理和實現過濾器
- 過濾器過濾器
- Laravel5.6 實現後臺管理登入(自定義使用者表登入)Laravel
- java中listFiles(Filefilter filter)檔案過濾器的實現過程JavaFilter過濾器
- SpringBoot中的過濾器和攔截器的實現Spring Boot過濾器