栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot从零开始的问答社区 (6)个人主页&登录跳转-拦截器Ⅱ

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot从零开始的问答社区 (6)个人主页&登录跳转-拦截器Ⅱ

个人主页

个人主页的主要内容为当前被访问用户的资料卡,以及该用户的动态列表。资料卡关系到关注、评论、点赞功能,暂时把它放到一边,只实现动态列表。

动态列表

单个用户的最新动态其实跟主页上所有用户的最新动态是相似的,只要在查询时增加筛选条件“user_id 字段的值为指定的 userId”即可。在前文第(3)篇“首页”中,QuestionService 里的 getQuestionList() 方法有参数 int userId,在实现主页的动态列表是传入的值为 0,而只要在 controller 层调用该方法时传入被访问用户的 id 就可以只查询单个用户发表的动态,从而实现个人主页的动态列表,非常简单。这里比较有趣的地方是在于 dao 的写法,mybatis 的 mapper 文件可以允许加入逻辑判断,这样只需要写一个 dao 就可以供 service 层的两种方法调用。


    question
    id, title, content, create_time, user_id, comment_count

    
登录跳转

有些页面或者请求是我们不希望让未登录用户访问的,而有些功能和页面本身就是为用户自己访问设计的,仅对登录的用户存在价值,例如“设置” “我的主页”等。也就是说,我们要让某个或者某些请求只有登录的用户才可以访问,未登录的用户请求访问时自动跳转到登录页,并且考虑到用户体验,在登录完成后需要让用户能够直接进入原先想要访问的页面。

要求登录 - 拦截器

使用拦截器就可以完美地阻止未登录用户访问我们不想完全开放的请求,在注册拦截器时,调用addPathPatterns() 方法,参数为要拦截的请求路径的正则表达式。

registry.addInterceptor(loginRequiredInterceptor).addPathPatterns("/user/*");

在将请求重定向到登录页的同时,记录用户想要访问的请求地址,经过进一步处理后在登录成功后跳转到这个请求。

@Component
public class LoginRequiredInterceptor implements HandlerInterceptor {
    @Resource
    HostHolder hostHolder;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(hostHolder.getUser() == null){
            response.sendRedirect("/reglogin?next="+request.getRequestURI());
        }
        return true;
    }
}
跳转到原请求

在注册登录页面加一个隐藏的标签,保存登录跳转时传过来的请求地址,在请求注册或登录时传给后端。

@GetMapping("/reglogin")
public String login(HttpServletRequest request,
                    @RequestParam(value = "next", required = false) String next) {
    request.setAttribute("next", next);
    return "login";
}

 处理登录请求时,一旦收到了原先的请求地址,就在登录验证成功后将请求重定向到该地址。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489837.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号