對於java後端三大底層原理(filter,servlet,session)的理解

filter前端

對於java後端來講,一個http請求過來會先通過filter,進行過濾,在filter下咱們能夠經過session作一些權限管理的過濾,把沒有權限的接口直接放回403,filter也能夠操做請求頭作一些跨域請求以下圖所示:java

filter實現跨域請求spring

相關代碼(我知道確定有人想要這段代碼的):後端

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    // 指定容許其餘域名訪問
    response.setHeader("Access-Control-Allow-Origin", "*");
    // 響應類型
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS, DELETE");
    // 響應頭設置
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header, HaiYi-Access-Token");
    //
  
    if ("OPTIONS".equals(request.getMethod())){
    response.setStatus(HttpStatus.SC_NO_CONTENT);
    }
    filterChain.doFilter(servletRequest, servletResponse);
}
複製代碼

另外struct2框架是基於filter開發的跨域

servlet瀏覽器

http請求通過filter的過濾以後若是沒有被攔截就會回掉到doget(),dopost()方法分別對應前端的get,post操做,以下圖所示:bash

注意:由於對於java後端來講get和post沒有任何區別,因此通常把get回調post去設計restful框架,這樣設計的restful框架就能同時能被get和post調用服務器

有一點要注意的是世面上的一些大衆框架springmvc其實只是基於servlet開發的一個多例框架restful

session(cookie)cookie

cookie和session相似於key value的一個map的數據結構,另外注意的是session通常也是key value的形式,瀏覽器第一次請求服務器時,服務器會生成一個sessionId,並返回給瀏覽器,這個sessionId會被保存在瀏覽器的會話cookie中,第二次訪問的時候會把sessionid帶上(也就是cookie).

相關文章
相關標籤/搜索