发表于: 2017-08-22 21:55:43
1 1060
今天:登陆接口虽然做完了,今天前端测试中出了很多问题,解决了一些另外一些没有解决。
根据接口规范改了一部分接口,在需要打日志的地方打了日志;
做分页的接口之前查询两次,先查一个COUNT数,给前端做分页,再把id取出来,现在直接取所有id,计算COUNT,在Java里做分页,不知道是不是效率更高一些,因为少查了一次数据库。但是也可能取所有id较慢,反而不如查询两次,需要以后用jmeter验证一下才知道。
//动态查询获取article列表
List<Long> idList = articleService.getIdsByDynamicCondition(Article.class, params, 0, Integer.MAX_VALUE);
//计算满足条件的article数量
total = idList.size();
//进行分页
idList = idList.stream().skip(start).limit(size).collect(Collectors.toList());
//获取分页后article对象列表
articleList = articleService.getObjectsByIds(idList);
登陆接口做好后,可以在新增article接口加入作者,用shiro工具类获得subject,再获得username。
try {
log.debug("获取当前用户的用户名");
username = (String) SecurityUtils.getSubject().getPrincipal();
article.setAuthor(username);
} catch (Exception e) {
log.error("获取当前用户用户名失败: " + e.getMessage());
return gson.toJson(new RMessage("获取当前用户用户名失败: " + e.getMessage(), 2));
}
解决了登陆接口的很多bug(前端还有一些问题没有解决),包括shiro的所有跳转(登陆成功,登录失败,未授权等)都是重定向,而不是转发,在全栈工程是没有任何问题的,但现在前后端分离,必须把所有重定向改成转发,所以又重写了所有的过滤器,改写重定向方法,变成转发,才能解决问题,否则前端页面302。
重写方法之一:
@Override
protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
try {
request.getRequestDispatcher(loginUrl).forward(request,response);
} catch (ServletException e) {
e.printStackTrace();}
//之前的重定向操作
//WebUtils.issueRedirect(request, response, loginUrl);
}
明天:抓紧修改bug,然后开始拆分Web和Service
问题:无
总结:shiro实际使用起来是相当麻烦的,适合全栈项目使用
进度:http://task.ptteng.com/zentao/project-burn-277.html
demo时间:月底。
评论