1. 程式人生 > >web 過濾器(jsp+cookie+filter免登陸Tomcat)使用記錄

web 過濾器(jsp+cookie+filter免登陸Tomcat)使用記錄

注意:過濾器主要過濾request,response裡面的值。

*web.xml----

*登入action新增cookie-------

*filter過濾器獲取cookie------

(不用從新輸入使用者名稱,密碼,直接讀取cookie通過查詢資料庫,獲取User  user ,

           request.getSession().setAttribute("user",user1))

*其他action裡面獲取---------

        (DUser user=(DUser) request.getSession().getAttribute("user");//)自動登入

*登出:刪除cookie----------

1、web配置檔案--過濾所有請求

<filter>
  <filter-name>LoginFilter</filter-name>
  <filter-class>com.djh.listener.LoginFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>LoginFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

2、登入的action裡面新增cookie

session.setAttribute("user", user);
      Cookie cookie1 = new Cookie("username",user.getUPhoneNum());  
               Cookie cookie2 = new Cookie("password",user.getUPassword());
//               Cookie cookie3 = new Cookie("SESSIONID","----");
               
               cookie1.setMaxAge(60 * 60);  
               cookie2.setMaxAge(60 * 60); 
//               cookie3.setMaxAge(0); 
               
               
               cookie1.setPath("/");  
               cookie2.setPath("/");  
//               cookie3.setPath("/");  
                 
               response.addCookie(cookie1);  
               response.addCookie(cookie2);  

3、過濾器類LoginFilter--主要方法是doFilter,在此方法裡取出request.getCcookies()值,set到request.getSession().setAttribute("user",user1); 
,其他介面通過過濾器set過來的“user”值取出uname,password自動登入。

package com.djh.listener;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.djh.entity.DUser;
import com.djh.service.LoginService;
import com.djh.util.MD5;

/**
 * @author shenpai
 * 實現使用者自動登入的過濾器
 */
public class LoginFilter implements Filter {
 ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext-*.xml"}); 
 LoginService loginService=(LoginService) context.getBean("loginService");//獲取UserService的bean的例項
  
 public void destroy() {
 }
 
 public void doFilter(ServletRequest req, ServletResponse resp,
   FilterChain chain) throws IOException, ServletException {
  try {
   
//   System.out.println("----------------");
   //把ServletRequest和ServletResponse轉換成HttpServletRequest和HttpServletResponse的型別
   HttpServletRequest request=(HttpServletRequest) req;
   HttpServletResponse response = (HttpServletResponse) resp ;
   //首先檢查使用者是否登入
   DUser user=(DUser) request.getSession().getAttribute("user");// 
   if(user!=null){
    chain.doFilter(request, response);
    return;
   }
   //檢查使用者是否帶來cookie
   String username= null;
   String password =null;
   Cookie[] cookies=request.getCookies();
   for(int i=0;cookies!=null && i<cookies.length;i++){  
//    System.out.println(cookies[i].getName()+cookies[i].getValue()+"----過濾器獲取cookies---");
             if(cookies[i].getName().equals("username")){  
                 username = cookies[i].getValue();  
             }  
             if(cookies[i].getName().equals("password")){  
                 password = cookies[i].getValue();  
             }  
         } 
   
    if(username==null || password==null){//使用者沒有帶來cookie  
              chain.doFilter(req, resp);  
              return;  
         }
   //使用者帶來了cookie   
    DUser user1 = loginService.findUserByPhoneNumAndPassword(
      username, password);  
         String save_password = user1.getUPassword();  
         if(!password.equals(save_password)){  
             chain.doFilter(req, resp);  
             return;  
         }  
         request.getSession().setAttribute("user",user1);  //通過requsest放到相關需要登入資訊的action裡面,action裡面通過reqest.獲取使用者資訊,實現自動登入。
         chain.doFilter(req, resp);
         return; 
  } catch (Exception e) {
   e.printStackTrace();
  } 
 }

 public void init(FilterConfig arg0) throws ServletException {
 }
 

}




4、Action獲取使用者資訊,實現自動登入。

DUser user=(DUser) session.getAttribute("user");//獲取登入使用者物件

5、登出:刪除cookie

// 使用者登出
 public String logout() {
            HttpSession session = request.getSession(false);
            if (session != null)
            session.removeAttribute("user");
            Cookie cookie = cookieUtils.<span style="BACKGROUND-COLOR: #3333ff">delCookie</span>(request);
            if (cookie != null)
                    response.addCookie(cookie);
            return "login";
 }


private CookieUtils cookieUtils = new CookieUtils();

// 刪除cookie
 public Cookie <span style="color:#3333ff;">delCookie</span>(HttpServletRequest request) {
         Cookie[] cookies = request.getCookies();
         if (cookies != null) {
                  for (Cookie cookie : cookies) {
                         if ("username".equals(cookie.getName())) {
                                cookie.setValue("");
                                cookie.setMaxAge(0);
                          }else if("password".equals(cookie.getName())){
                                cookie.setValue("");
                                cookie.setMaxAge(0);
                         }
                         return cookie;
                 }
         }
         return null;
 }

相關推薦

web 過濾器jsp+cookie+filter登陸Tomcat使用記錄

注意:過濾器主要過濾request,response裡面的值。 *web.xml---- *登入action新增cookie------- *filter過濾器獲取cookie------ (不用從新輸入使用者名稱,密碼,直接讀取cookie通過查詢資料庫,獲取User 

防止web端腳本攻擊的過濾器可過濾大部分腳本攻擊

bool 輸入 後臺 getmethod else 重復 servlet inpu pre 在後臺進行攻擊攔截是必要的,下面是我所使用的防止web端腳本攻擊的過濾器工具。 1.配置文件: 1 <!-- 請求攔截 --> 2 <mvc:intercepto

web專案jsp+Java錯誤總結

一:當部署專案時出現Project facet Java version 1.8 is not supported.(jdk版本不一致) 解決方案:錯誤專案右鍵properties ——》 找到project Facets修改裡面的Java版本(適合的版本)

Java的web專案中使用cookie儲存使用者登陸資訊

最近在編寫論壇系統的實現,其中就涉及到使用者登陸後保持會話直到瀏覽器關閉,同時可以使用cookie儲存登陸資訊以便在下次可以自動登陸。使用struts2框架實現。   下面是在action裡登陸和登出的函式  Java程式碼 

訪問控制過濾器Access Control Filter

訪問控制過濾器是檢查當前使用者是否能執行訪問的controller action的初步授權模式。 這種授權模式基於使用者名稱,客戶IP地址和訪問型別。 訪問控制過濾器,適用於簡單的驗證。 需要複雜的訪問控制,需要使用將要講解到的基於角色訪問控制(role-bas

Apache配置與應用,虛擬目錄;訪問控制;虛擬Web主機多域名;多端口

ESS hat 負載 httpd服務器 數據庫文件 nbsp 新建 需要 工具 1,虛擬目錄Httpd 虛擬目錄 便於網站管理和維護,內容分類。例如;hhtpd://www.benet.com/news 新聞Httpd://www.benet.com/edu 學習以

樹莓派安裝opencv跳坑指南pip安裝,原始碼編譯

在樹莓派上安裝opencv-Python用sudo pip install opencv-python命令總是安裝不上,顯示錯誤說網頁上找不到原始檔 而你又不想用很複雜的壓縮包安裝,可以考慮一下這個方法。廢話不多說下面開始 工具 :1. 樹莓派3b  (官方系統)  

Kerberos環境下KafkaManager的安裝使用編譯版和編譯版

為了能夠方便的檢視及管理Kafka叢集,yahoo提供了一個基於Web的管理工具(Kafka-Manager)。這個工具可以方便的檢視叢集中Kafka的Topic的狀態(分割槽、副本及訊息量等),支援管理多個叢集、重新分配Partition及建立Topic等功能。

idea熱部署更新jsp程式碼不用重編譯Tomcat

前端熱部署(更改前端程式碼,不用重啟tomcat,重新整理瀏覽器就可以) 主要在於 On frame deactivation選項配置選擇為 Update classes and re

【J2EE】【2.JDBC】JDBC連線資料庫MariaDB,Mysql繼續之前jee的登陸例子

零,名詞解釋 JDBC JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高階的

Python基礎reduce,filter,map函式

map函式:   map函式特點:對可迭代物件中的每個元素進行相同的操作(例如每個元素+1等等) 1 #————————————————map函式———————————————————— 2 #對列表的各個元素實現加一功能 3 li=[1,2,3] 4 #定義一個加一函式

Servlet編碼過濾器Post和get方式都支援

package com.pdsu.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.servlet.Filter; import j

JavaWeb系列之九jsp,javabean,el表示式

 1.jsp:java server pages,java伺服器端的頁面     sun公司提供開發動態網站的技術servlet jsp     jsp會編譯成servlet,會放到tomcata的work目錄     jsp的包含:html+java程式碼+jsp自身

Servlet 過濾器Filter判斷使用者是否登陸jsp頁面

過濾器Servlet類: package servlet; import java.io.IOException; //import java.io.PrintWriter; import javax.servlet.Filter; import javax.serv

Filter過濾器自動登陸、通用的字符集編碼的過濾【處理不同請求的亂碼問題】、。。。

XML under amt 有關 filter過濾器 pre 繼承 擴展名 獲取 Filter過濾器:可以過濾(攔截)從客戶端向服務器發送的請求。 過濾器的作用:   進行ip的過濾,臟話敏感詞語的過濾,自動登陸,響應壓縮。。。 過濾器的使用:   1.編寫類實現Filte

vue問題記錄cookie實現三天內登陸,以及記住使用者名稱密碼等

首先,我們是要在自己的專案目錄下面建立一個資料夾,如下圖 ,然後就在我標記的地方,寫關於cookie的方法,獲取cookie,設定,清除等,如下圖 程式碼如下,方便拷貝 //獲取cookie、 export functio

理清jspfilter過濾器和struct2的攔截器Interceptor

先放著,待會寫 先記住下面這幾點: 1、filter是servlet,jsp裡面的東西,應該說是屬於規範了,而攔截器是struts的東西,不通用。 2、一個請求,get,post等方式,到後臺,必須先經過filter,然後經過Interceptor,最後在通過在filter

Web開發---過濾器Filter

開發人員通過對Filter配置,可以管理所有的web資源,對jsp,servlet,靜態圖片或者靜態html進行攔截。還可以在返回之前進行攔截處理。 一個java類實現了Filter介面,就可以成為一

java web過濾器你瞭解嗎?Filter和ChainFilter鏈

1、什麼是過濾器?      在客戶端到伺服器的過程中,當傳送請求時,如果有不符合的資訊將會被filter進行攔截,如果符合則會進行放行,在伺服器給客戶端響應時也會進行判斷 如果有不符合的資訊將會被filter進行攔截,如果符合則會進行放行。     OOP:Java面向物件

SpringMVC的攔截器Interceptor過濾器Filter的區別與聯系

get err 實例 分享 切面 簡介 () lee XML 一 簡介 (1)過濾器: 依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取