JavaWeb學習打卡-Day4-會話技術、JWT、Filter、Interceptor
會話技術
會話:用戶打開瀏覽器,訪問web服務器的資源,會話建立,直到有一方斷開連接,會話結束。在一次會話中可以包含多次請求和響應。 會話跟蹤:一種維護瀏覽器狀態的方法,服務器需要識別多次請求是否來自于同一瀏覽器,以便在同一次會話的多次請求間共享數據。
會話跟蹤方案:
客戶端會話跟蹤技術:Cookie 優點:是HTTP協議中支持的技術,是官方提供的。 缺點: 移動端APP無法使用Cookie。 不安全,用戶可以自己禁用Cookie。 Cookie不能跨域。 服務端會話跟蹤技術:Session 優點:存儲在服務端,安全 缺點: 服務器集群環境下無法直接使用Session。 Cookie的缺點。 令牌技術 優點: 支持PC端、移動端。 解決集群環境下的認證問題。 減輕服務器端存儲壓力。 缺點:需要自己實現。
JWT
JWT簡介
全稱:JSON Web Token 定義了一種簡潔的、自包含的格式,用于在通信雙方以json數據格式安全的傳輸信息。由于數字簽名 的存在,這些信息是可靠的。 組成: Header(頭):記錄令牌類型 ,簽名算法 等。采用Base64編碼。例如:{“alg”:“HS256”,“type”:“JWT”} Payload(有效載荷):攜帶一些自定義信息 ,默認信息 等。采用Base64編碼。例如:{“id”:“1”,“username”:“Tom”} Signature(簽名):通過指定的簽名算法,將header、payload,再加入指定秘鑰計算而來。防止Token被篡改,確保安全性。
JWT場景:登錄認證
令牌生成:登錄成功后,生成JWT令牌,并返回給前端。 令牌校驗:后續每個請求,都要攜帶JWT令牌。在請求到達服務端后,對令牌進行統一攔截、校驗。JWT校驗時使用的簽名秘鑰,必須和生成JWT令牌時使用的秘鑰是配套的,如果JWT令牌解析校驗時報錯,則說明JWT令牌被篡改或失效了,即令牌非法 。
過濾器(Filter)
介紹
Filter 過濾器,是 JavaWeb 三大組件(Servlet、Filter、Listener)之一 。 過濾器可以把對資源的請求攔截下來,從而實現一些特殊的功能。 過濾器一般完成一些通用的操作,比如:登錄校驗、統一編碼處理、敏感字符處理等。
入門
定義Filter:定義一個類,實現 Filter接口,并重寫其所有方法。 配置Filter:Filter類上加 @Webfilter 注解,配置攔截資源的路徑。引導類(啟動類)上加 @ServletComponentScan 開啟Servlet組件支持。@WebFilter ( urlPatterns = "/*" )
public class DemoFilter implements Filter { public void init ( FilterConfig filterConfig) throws ServletException { Filter . super . init ( filterConfig) ; } public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain) { System . out. println ( "攔截方法執行,攔截到了請求.." ) ; chain. dofilter ( request, response) ; } public void destroy ( ) { Filter . super . destroy ( ) ; }
}
Filter攔截路徑
攔截路徑 urlPatterns值 含義 具體路徑 /login 只有訪問 /login 路徑時,才會被攔截 目錄攔截 /emps/* 訪問/emps下的所有資源,都會被攔截 攔截所有 /* 訪問所有資源,都會被攔截
過濾器鏈
一個web應用中,可以配置多個過濾器,這多個過濾器就形成了一個過濾器鏈 注解配置的Filter,優先級是按照過濾器類名(字符串)的自然排序。
攔截器(interceptor)
介紹
是一種動態攔截方法調用的機制,類似于過濾器。 是Spring框架中提供的 ,用來動態攔截控制器方法的執行。 用來攔截請求,在指定的方法調用前后,根據業務需要執行預先設定的代碼。
入門
定義攔截器,實現HandlerInterceptor接口,并重寫其所有方法。@Component
public class LoginCheckInterceptor implements HandlerInterceptor { @Override public boolean preHandle ( HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { System . out. println ( "preHandle ..." ) ; return true ; } @Override public void postHandle ( HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView modelAndView) { System . out. println ( "postHandle ..." ) ; } @Override public void afterCompletion ( HttpServletRequest req, HttpServletResponse resp, Object handler, Exception ex) { System . out. println ( "afterCompletion ..." ) ; }
}
注冊攔截器@Configuration
public class WebConfig implements WebMvcConfigurer { @Autowired private LoginCheckInterceptor loginCheckInterceptor; @Override public void addInterceptors ( InterceptorRegistry registry) { registry. addInterceptor ( loginCheckInterceptor) . addPathPatterns ( "/**" ) ; }
}
攔截路徑
執行流程
Filter與Interceptor
接口規范不同:過濾器需要實現Filter接口,而攔截器需要實現HandlerInterceptor接口。 攔截范圍不同:Filter會攔截所有的資源,而Interceptor只會攔截Spring環境中的資源 。
本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78547.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78547.shtml
如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!