最近公司使用springboot开发新项目,使用ftl作为模板,好家伙刚跳槽就有新项目,然后连续加班两星期,感觉就在猝死的路上了.......整体功能基本完成了,加个登录!为了增加用户体验肯定要来个remember了啦!老规矩后台写起来,cookie保存!前台ftl 获取cookie。
<#assign cookies = request.getCookies()> <#list cookies as cookie> <#if cookie.name = "username"> $("#username").val(${cookie.value}); console.log(${cookie.value}); </#if> <#if cookie.name = "password"> $("#password").val(${cookie.value}); </#if> </#list>百度了一下,ftl比较好的地方就是js中也可以使用标签哦!start运行一波!麻了法克!
FTL stack trace ("~" means nesting-related):
- Failed at: #assign cookies = request.getCookies() [in template "login.ftl" at line 129, column 9]
<#assign cookies = request.getCookies()>这行报错,瞬间慌了!百度上都说ftl获得cookie是通过这个方法的啊,最tmd无语的是,明明有人提出了这个问题,但是还有DB回复这个解决方法!智障嘛(⊙_⊙)?
@CookieValue(value="username" ,defaultValue = "1") String username然后就是有人提出需要从服务端request中获得cookie然后返回给ftl,so我就找到这个springmvc获得cookie(@CookieValue),同时我在后台添加了通过request获得cookie的处理
//cookie 获得username,password Cookie[] cookies = request.getCookies(); if(null!=cookies){ for(Cookie cookie : cookies){ System.out.println("name:"+cookie.getName()+",value:"+ cookie.getValue()); if(cookie.getName().equals(user_username)){ modelAndView.addObject(user_username, cookie.getValue()); } if(cookie.getName().equals(user_pwd)){ modelAndView.addObject(user_pwd, cookie.getValue()); } } }以及
@CookieValue(value="username" ,defaultValue = "1") String username, @CookieValue(value="pwd" ,defaultValue = "2") String password,不过很遗憾,2种方式都没有获得我想要的值!@CookieValue就不做解释了,自己百度!既然没有,那就看看浏览器cookie中是否有对应信息
cookie中用户的相关信息也是有的,可就是获取不到,没办法那就
var cookies= document.cookie;
原生获取cookie的方法,但是还是获取失败!那就翻墙谷歌找找解决方法啊!
然后搜到个是搞单点登录的,但是他纪录cookie的几个参数让我眼前一亮,
我的浏览器查看cookie时,里面的路径是"/userInfo",这是因为我的cookie保存时在路径"/userInfo/login“,而我的登录路径是"/","/index",难道是因为我没有设定可见路径,导致默认cookie中的值可见路径是"/userInfo",然后我就查看后台从cookie中唯一获得的值JSESSIONID的路径,果不其然,貌似发现问题
对比下,发现问题了!可见路径!
//保存Cookie Cookie ckUserName = new Cookie(user_username, userInfo.getUsername()); ckUserName.setMaxAge(60 * 60 * 24 * 99999999); //设置Cookie保存 ckUserName.setPath("/"); response.addCookie(ckUserName); Cookie ckPswd = new Cookie(user_pwd, userInfo.getPassword()); ckPswd.setMaxAge(60 * 60 * 24 * 99999999); ckPswd.setPath("/"); response.addCookie(ckPswd);添加path设定!清空cookie,重启!
controller成功获得cookie信息!
最后总结就是:麻痹了,平时用习惯了cookie,只设定值跟时间,没有关注过路径的问题!踩坑!
至于开篇提到的<#assign cookies = request.getCookies()>获取cookie的方法,试了下还是不可以!