发表于: 2017-08-23 22:30:29

1 1071


今天:解决了登陆接口的最后一个bug(希望是)。浏览器登陆成功后,可以正常保存Cookie;前端页面登录成功后,无法保存带有JSESSIONID的Cookie,因此每次请求服务器都会建立一个新的session,自然无法做登录之后的验证。


一开始以为是前端的问题,以为是前端把cookie给整没了,后来发现错怪了前端,cookie的问题完全是后端,前端对cookie是不进行操作的。


后来发现,前端页面在使用公共接口时,JSESSIONID的cookie是可以正常保存的,所以可以假设问题出在自己的cookie上。


经过仔细观察,自己的cookie多了一个path属性,path属性规定了服务器路径,客户端浏览器很可能就是因为这个path路径不符(可能和Nginx代理有关),就把cookie没带在请求头里面。


在shiro中通过debug,找到了往cookie里面加path的代码,把它注掉了。然后问题就解决了。


protected String buildHeaderValue(String name, String value, String comment,
                                  String domain, String path, int maxAge, int version,
                                  boolean secure, boolean httpOnly) {
    if (!StringUtils.hasText(name)) {
        throw new IllegalStateException("Cookie name cannot be null/empty.");
    }
    StringBuilder sb = new StringBuilder(name).append(NAME_VALUE_DELIMITER);
    if (StringUtils.hasText(value)) {
        sb.append(value);
    }
    appendComment(sb, comment);
    appendDomain(sb, domain);
    //appendPath(sb, path);
    appendExpires(sb, maxAge);
    appendVersion(sb, version);
    appendSecure(sb, secure);
    appendHttpOnly(sb, httpOnly);
    return sb.toString();

}


Cookie也有其他的一些参数:

参数描述
name必需。规定 cookie 的名称。
value必需。规定 cookie 的值。
expire可选。规定 cookie 的有效期。
path可选。规定 cookie 的服务器路径。
domain可选。规定 cookie 的域名。
secure可选。规定是否通过安全的 HTTPS 连接来传输 cookie。


2.对接口进行了一定的修改,加入了一些非空判断,加入了一些注释,修改了和前端要求不符的接口,将自定义的JSON实体类整合成一个,减少代码量。将去重方法改成stream(),不需要用set了。


List<Long> uniqueIdList = idList.stream().distinct().collect(Collectors.toList());


明天:测试完接口后,开始内部codereview,拆分模块,然后让师兄codereview。


问题:无


总结:无


进度:http://task.ptteng.com/zentao/project-task-277.html


demo:周末左右



返回列表 返回列表
评论

    分享到