在學習前后端分離的時候要求跨域,攜帶cookie,在postman測試是有cookie顯示的,但是在Firefox和Chrome調試的時候能獲取到cookie攜帶的值,但是F12查看不到cookie,在這個地方斷斷續續困擾了兩天,最后發現原來是路徑的問題,之前一直用的idea打開的前端頁面,默認路徑是localhost:8080...
后面發現把localhost改成127.0.0.1之后,就能顯示cookie了
補充一點:
之后又發現一個問題
在后端添加了監聽器之后,貌似只能用127.0.0.1登錄了,用localhost登錄直接會被判定為未登錄然后返回登錄頁面,還沒弄明白是為什么
又發現一個問題,昨天搞完之后,今天打開項目,localhost登錄彈回,127登錄也彈回,代碼沒改,沒找到問題,但是調試后端,在boolean flag = fasle打了個斷電發現,再重新啟動就發現沒問題了(可能是我看不懂調試結果)
1 package com.kgc; 2 3 import com.alibaba.druid.util.StringUtils; 4 import com.alibaba.fastjson.JSONObject; 5 import com.kgc.utils.Result; 6 7 import javax.servlet.*; 8 import javax.servlet.annotation.WebFilter; 9 import javax.servlet.http.Cookie; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 import java.io.IOException; 13 import java.io.PrintWriter; 14 import java.net.URLDecoder; 15 16 /** 17 * 登錄過濾器 18 */ 19 @WebFilter(urlPatterns = "/view/*") 20 public class LoginFilter implements Filter { 21 @Override 22 public void init(FilterConfig filterConfig) throws ServletException { 23 24 } 25 26 @Override 27 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 28 //校驗用戶登錄狀態 29 HttpServletRequest request = (HttpServletRequest) servletRequest; 30 HttpServletResponse response = (HttpServletResponse) servletResponse; 31 32 //Filter過濾器跨域處理 33 String origin = request.getHeader("Origin"); 34 response.setHeader("Access-Control-Allow-Origin",origin); 35 response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 36 response.setHeader("Access-Control-Max-Age", "3600"); 37 response.setHeader("Access-Control-Allow-Methods", "x-request-with,Authorization"); 38 response.setHeader("Access-Control-Allow-Credentials", "true"); 39 40 Cookie[] cookies = request.getCookies(); //從request拿到cookie 41 boolean flag = false; 42 if (cookies != null && cookies.length > 0){ //有cookie 43 for (Cookie cookie:cookies) { 44 String name = cookie.getName();//獲取cookie的名稱 45 String value = cookie.getValue();//獲取cookie的值 46 if (name.equals("USER_LOGIN") && !StringUtils.isEmpty(value)){ 47 //已登錄,放行 48 flag = true; 49 filterChain.doFilter(servletRequest,servletResponse); 50 break; 51 } 52 } 53 } 54 if (!flag){ 55 //未登錄,相應數據(用到HttpServlertRsponse) 56 String string = JSONObject.toJSONString(new Result(null, "未登錄", 103));//把result對象轉成json字符串 57 //相應的地方設置內容的類型(json/text),編碼格式 58 response.setContentType("json/text;charset=utf-8"); 59 PrintWriter out = response.getWriter();// 取出輸出流,response.getWriter()返回的是PrintWriter,這是一個打印輸出流 60 out.write(string);//相應JSON字符串string 61 } 62 } 63 64 @Override 65 public void destroy() { 66 67 } 68 }
調試:
本來返回登錄界面應該是進了if(!flag),但是調試沒有進,就沒問題了,也不知道到底為啥。。。