fetch 自动加cookie | 您所在的位置:网站首页 › 谈谈session和cookie技术 › fetch 自动加cookie |
写最简单的登录功能 也就是访问了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 实验室设备网 版权所有 |