• 社区系统项目复盘-2


    登录模块

    重要知识点:

    1. ThreadLocal,Hostholder采用Threadlocal持有用户信息,用于代替session对象
      • ThreadLocal采用线程隔离的方式存放数据,可以避免多线程之间出现数据访问冲突。
      • ThreadLocal提供set方法,能够以当前线程为key存放数据。
      • ThreadLocal提供get方法,能够以当前线程为key获取数据。
      • ThreadLocal提供remove方法,能够以当前线程为key删除数据。
    2. 拦截器
    • 拦截器示例

      • 定义拦截器,实现HandlerInterceptor

        在controller/interceptor路径下定义拦截器,使用@Compont注解,implements HandlerInterceptor,里面有三个方法可以重写

        • preHandle() // 在Controller之前执行,若返回false,则终止执行后续的请求。
        • postHandle() // 在Controller之后执行,模版之前执行。
        • afterCompletion() // 在模版引擎TemplteEngine之后执行。
      • 配置拦截器,为他指定拦截、排除的路径

        WebMvcConfig implements WebMvcConfigurer,实现WebMvcConfigurer接口

        首先使用@Autowired注解注入拦截器,然后重写addInterceptors()方法

        https://res.craft.do/user/full/fd148a50-4a5b-9a85-bec3-e1645571e2c7/doc/E5A630C2-3AE5-4D32-8251-762AF7B232E0/8DD543E3-6659-4C30-B98C-2D044469E02E_2/xjLap3R3bhLaxe8Gk47bPUys5PkekLHoKL5hRyoMN90z/Image.png

    • 拦截器应用(显示登录信息)

      https://res.craft.do/user/full/fd148a50-4a5b-9a85-bec3-e1645571e2c7/doc/E5A630C2-3AE5-4D32-8251-762AF7B232E0/C65470A1-69EC-4BCC-9395-0F23ED132715_2/275aMHWJnw8VGiEeR6ecJzCWKH2hTDo63NOHwiFYk8Mz/Image.png

      • 在请求开始时查询登录用户
      • 在本次请求中持有用户数据
      • 在模板视图上显示用户数据
      • 在请求结束时清理用户数据
      • 提示:拦截器在controller执行前执行preHolder,根据登录凭证(这里的登录凭证是从cookie中获得的,该cookie不能由@CookieValue获得,只能从request请求中获得指定cookie(封装为一个工具类),)获得用户信息,然后存到hostHolder中(这里的用户信息,是通过ThreadLocal来持有的,代替了session,hostHolder也封装为了一个工具类),在controller执行后,模版之前执行postHandle,将用户信息存到modelandview中,用来写出到模板,在模板执行后执行afterCompletion,清空hostHolder中的用户信息,节省内存空间。
    • 拦截器应用(检查登录状态)

      • 使用拦截器的另一种方法

        • 首先定义自定义注解。
        @Target(ElementType.METHOD)
        @Retention(RetentionPolicy.RUNTIME)
        public @interface  LoginRequired {
        }
        
        • 1
        • 2
        • 3
        • 4
        • 在需要拦截的方法前标注自定义注解
        • 拦截所有请求,只处理带有该注解的方法
        @Component
        public class LoginRequiredInterceptor implements HandlerInterceptor {
            @Autowired
            private HostHolder hostHolder;
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                // 首先判断拦截到的是不是一个方法
                if(handler instanceof HandlerMethod){
                    // 获取拦截到的Method对象
                    HandlerMethod handlerMethod = (HandlerMethod) handler;
                    Method method = handlerMethod.getMethod();
                    // 获取Method的注解
                    LoginRequired longinRequired = method.getAnnotation(LoginRequired.class);
                    // 如果有loginRequired注解但是没有登录,说明当前方法需要登录,但是没有登录,那么拒绝后续请求,强制重定向到登录页面
                    if(longinRequired != null && hostHolder.getUser() == null){
                        response.sendRedirect(request.getContextPath()+"/login");
                        return false;
                    }
                }
                return true;
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
      • 自定义注解

        • 常用的元注解:@Targrt、@Retention、@Document、@Inherited
          • @Targrt:自定义注解可以作用在哪里、
          • @Retention:自定义注解什么时候有效、编译时?运行时?
          • @Document:生成文档时要不要把注解也带上去、
          • @Inherited:用于继承
        • 如何读取注解:利用反射Method
          • Method.getDeclaredAnnotations()
          • Method.getAnnotation(Class annotationClass)

    注册

    • 访问注册页面、提交注册数据、发送邮件激活、激活注册账号
      在这里插入图片描述

    登录

    • 访问登录页面,生成验证码,提交登录数据,显示登录信息,退出功能
      在这里插入图片描述

    账号设置

    • 访问账号设置页面,修改头像,修改密码,检查登录状态
      在这里插入图片描述
  • 相关阅读:
    图像处理: ImageKit.NET 3.0.10704 Crack
    pix2tex - LaTeX OCR 安装使用记录
    什么是机器人离线编程? 衡祖仿真
    使用keil 5.37版本编译FreeRTOS出错原因及解决办法
    [ 图 论 ]二分图判定及其匹配(基础+提高)
    C#编程流程控制与集合类型
    面试:ANR相关
    京东AIGC实战项目复盘;第一门AI动画系统课程;百川智能启动2024校园招聘;Kaggle 2023 AI前沿报告 | ShowMeAI日报
    R语言使用caret包的train函数构建多元自适应回归样条(MARS)模型、查看模型输出结构、最优超参数及对应模型评估指标
    快速搭建接口自动化测试框架
  • 原文地址:https://blog.csdn.net/wangws_sb/article/details/128100053