fetch 自动加cookie 您所在的位置:网站首页 谈谈session和cookie技术 fetch 自动加cookie

fetch 自动加cookie

2023-04-01 14:00| 来源: 网络整理| 查看: 265

写最简单的登录功能

也就是访问了login接口通过之后,才能顺利访问其它接口,否则访问其它接口就不返回,或者跳转到login页面。response.sendRedirect("/index"); 这里没写页面,所以就没有其它功能了。

代码:

控制层

@GetMapping("/login") @ResponseBody public String get(HttpServletRequest request, HttpServletResponse response){ Cookie cookie = new Cookie("my_session_id","123456"); response.addCookie(cookie); request.getSession().setAttribute("sessionid","88888888"); log.info("addcookie ok"); return "bbb"; } @GetMapping("/bb") @ResponseBody public String getbb(HttpServletRequest request){ log.info("进入到getbb"); return "ccc"; }

全局拦截器:

@Configuration public class FilterConfig { @Bean FilterRegistrationBean getFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new LoginFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.setOrder(1); filterRegistrationBean.setName("myloginfilter"); return filterRegistrationBean; } }

真正的过滤器:

@Slf4j public class LoginFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; String my_session_id = (String)request.getSession().getAttribute("my_session_id"); if(!"/login".equals(request.getServletPath())&& my_session_id==null){ log.info("被拦截"); return; } filterChain.doFilter(servletRequest,servletResponse); } }

然后看看网页:

http://localhost:8080/bb

这个是第一次访问,这里在response中返回set-cookie,意思是让浏览器把这个cookie存入,然后设置cookie的一些属性。这个JSESSIONID是Tomcat自动生成的,让我们来标识session的。代码里request.getSession().setAttribute("sessionid","88888888");就是和这个默认的JSESSIONID绑定。

这里我们又手动加了一个cookie。

然后看下最后一个请求

这里就把两个cookie都带过来了。

然后看服务器这边。

这里的sessionid就是客户端传过来的了,然后里面有我们之前存储的key和value。

然后request.getcookies的话就可以看到传过来的两个cookie。

这里以前理解错了,对session的理解不到位,总以为要自己手动设置设置cookie才能使session生效。。。这就是以前以为那么简单然后懒得动手的后果。。。 原来Tomcat的session是它自己维护的cookie的映射,根本不需要我们动手操作。

前端发请求后后端的时候,Tomcat就会自动根据cookie里面的JSESSIONID来映射到session对象。然后存到这个request里面。就算我们不操作这个session,Tomcat也会自动帮我们加上这个JSESSIONID。我们可以想象里面的map的映射关系,可以猜测源码大概长啥样。

String my_session_id = (String)request.getSession().getAttribute("sessionid");

这样操作数据就很方便了。

如果我们自己手动去维护这个cookie的话,然后自己去映射存储数据的话,就比较麻烦。可以注意一下通过http头进行的交互,response的set-cookie。request.getSession().setAttribute("sessionid","88888888"); 虽然是对request的操作,但也是直接通过response反馈到浏览器的。而response.addCookie(cookie);则直接对response操作了。

嗯,还是多操作实践吧。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有