码神之路项目总结(二)

目录

一、登录功能 &

二、获取用户信息&

三、退出登录

四、登录拦截¥

五、ThreadLocal保存用户信息¥

六、文章详情


一、登录功能 &

 请求接口:

  

 思路:

1、首先接收前端传过来的用户名和密码,判断值是否为空,为空则直接返回错误状态码

2、将密码用md5进行盐值加密,加密后生成新密码

3、用前端传过来的用户名和加密后的新密码去用户表查询用户,查不到则直接返回错误状态码

4、使用jwt工具类以用户的id为参数生成token,返回给前端页面

5、以用户生成的token为key,从用户表中查出的用户信息为value,存入redis中,设置一天的过期时间

二、获取用户信息&

说明:因为你登录成功后,仅仅是返回给前端的一个token,用户的头像信息个人信息前端都不知道,因此登录成功后接下来前端要再发请求获取用户信息

请求接口:

思路:

 1、获取用户信息的请求头中有token,我们先接收拿到token

2、用jwt工具类中的方法检验token格式是否合法,不合法返回错误状态码

3、以token为key去redis中获取token对应的用户信息,获取不到则返回错误状态码

4、将从token中获取到的用户信息封装好返回给前端页面

好处:
将用户信息和token绑定存入redis中,减少了再一次查询数据库,提高了查询效率

三、退出登录

请求接口:

 思路:

1、退出请求的请求头中携带token,我们首先获取到这个token

2、然后将redis中这个token绑定的数据给删除掉即可完成退出

四、登录拦截¥

作用:博客上的有些资源,我们需要用户登录后才能访问,如果资源过多需要为每一个请求都加一个判断登录的方法有些代码重复,因此我们采用拦截器统一处理这些请求是否登录。

思路:

1、写一个继承HandlerInterceptor的拦截器类

2、在拦截器类中重写prehandler方法,如果不是controller方法返回true放行,如果是token为空、token格式不正确、token在redis中失效则返回false拦截,否则返回true放行

3、在WebMvcConfigurer中重写addIntercepters方法注册自定义的拦截器

五、ThreadLocal保存用户信息¥

作用:需要登录才能访问的资源请求,在通过登录拦截后,如果我们要使用登录的用户信息这个时候我们再从请求中去获取就显得有点麻烦,不如在通过登录拦截后,将用户的信息保存进ThreadLocal中,之后用到用户信息了再从ThreadLocal中获取用户信息。

思路:

1、定义ThreadLocal的工具类,实例化一个ThreadLocal,并创建它的的put、get、remove方法

2、在通过拦截器的拦截后将登录用户的信息存入ThreadLocal中

3、在所有方法执行完,线程结束前,将ThreadLocal中用完的信息手动删除

图解:

结构==》每一个Thread维护一个ThreadLocalMap,一个ThreadLocalMap中可以有多个Entry实体,而Entry实体的key是ThreadLocal实例,value是当前线程的存储信息。

泄漏==》因为实体Entry的key指向ThreadLocal实例是弱引用,在ThreadLocal实例没有引用的时候就会被垃圾回收掉,因此key的值就变成了null,实体Entry就只剩一个value,按理来说没人用的value应该也被垃圾回收掉,但是value所在的实体Entry在的ThreadLocalMap受当前线程维护,所以实体的Entry的生命周期跟当前线程一样长,如果不手动回收则此Entry实体会一直存在内存中,如果使用了线程池复用线程则会内存占用量越来越大,最终导致内存泄漏

六、文章详情

请求接口:

思路:

1、请求中携带本篇文章的id,我们可以通过id在文章表中查询出文章的相关信息,返回前端页面

2、查询完成后,以查询出的文章内容为已知条件,使用线程池将文章表中此文章的阅读次数+1

线程池更新阅读次数详情:

@EnableAsync+@Async实现共享线程池

/**
 * @description: 配置线程池相关参数
 * @author: 李传城
 * @date: 2022-11-03 01:20
 */

@Configuration
@EnableAsync
public class ThreadPoolConfig {

    @Bean("taskExecutor")
    public Executor asyncServiceExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 设置核心线程数
        executor.setCorePoolSize(5);
        // 设置最大线程数
        executor.setMaxPoolSize(20);
        //配置队列大小
        executor.setQueueCapacity(Integer.MAX_VALUE);
        // 设置线程活跃时间(秒)
        executor.setKeepAliveSeconds(60);
        // 设置默认线程名称
        executor.setThreadNamePrefix("码神之路博客项目");
        // 等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        //执行初始化
        executor.initialize();
        return executor;
    }
}
/**
 * @description: 线程池更新阅读次数
 * @author: 李传城
 * @date: 2022-11-03 01:21
 */

@Component
public class ThreadService {


    //把服务配置的线程池名称写上,代表开启这个配置名称的线程池处理当前方法
    @Async("taskExecutor")
    public void updateViewCount(ArticleMapper articleMapper,Article article){

        Article articleUpdate = new Article();
        articleUpdate.setViewCounts(article.getViewCounts() + 1);
        LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Article::getId,article.getId());
        queryWrapper.eq(Article::getViewCounts,article.getViewCounts());
        articleMapper.update(articleUpdate,queryWrapper);
        try {
            //睡眠5秒 证明不会影响主线程的使用
            Thread.sleep(10);
            System.out.println("文章:"+article.getTitle()+"--阅读次数+1");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《码神之路独家Java面试宝典》是一本很好的Java面试书籍,该书主要涵盖了Java的基础知识、面向对象编程、多线程、集合框架、IO等方面,以及常见的Java面试问题和解答技巧。 它的特点在于,首先作者从面试官和面试者的角度出发,结合多年的面试经验,总结出了一些面试技巧和经验,这对于想要在面试过程中获得优势的Java程序员非常有帮助。其次,该书不仅仅介绍了Java的基础知识,还深入探讨了一些Java技术的细节和底层原理,对于进一步提升Java程序员的技术能力也非常有帮助。 总的来说,《码神之路独家Java面试宝典》是一本集Java面试技巧、Java技术知识、Java底层原理于一体的优秀作品,值得广大Java程序员阅读和学习。无论是面试前的准备还是面试后的总结,都可以从该书中获得很多帮助和启示。 ### 回答2: 《码神之路独家Java面试宝典》是一本Java面试备考必备的书籍。这本书首先从面试的整体流程、面试中需要注意的事项及常见问题等方面进行介绍,为读者提供了全面的面试指南。然后,书籍重点讲解了Java的核心知识点,例如Java基础、Java并发、Java虚拟机等方面。在每章的最后,都有丰富的面试题和答案以及解析,帮助读者更好地掌握知识点和增加应对面试的能力。 这本书籍自身也有很高的可读性和实用性,例如书中还提供了很多面试必备的代码和技巧等,这些都有助于读者更好地应对面试。此外,书中还根据不同难度和公司类型的面试提供了不同的面试备考方案,让读者可以有针对性地备考。 总之,《码神之路独家Java面试宝典》是一本非常好的Java面试备考书籍,无论是应届生还是有一定工作经验的Java开发者都可以从中受益匪浅。它涵盖了Java开发中的核心知识点和实用技巧,还提供了丰富的面试题目和答案解析,是一本值得购买和阅读的好书。 ### 回答3: “码神之路独家java面试宝典”是为Java程序员提供的一本面试参考书籍。该书籍涵盖了Java开发过程中的基础知识、经典面试题及其解答、常用算法及数据结构、并发编程等方面内容。通过该书籍的学习能够帮助Java程序员深入了解Java编程语言,提高自己的面试竞争力,从而更好地开展工作。 该书籍主要包含了三大部分内容: 第一部分是Java编程基础,包括Java语言基础、面向对象编程、Java核心类库等内容。这一部分的知识是Java程序员必须掌握的,也是面试中经常被提到的内容。 第部分是Java面试题,包括常见的面试题及其解答。这一部分的内容是很受Java程序员欢迎的,因为它们是面试中最需要准备的内容。 第三部分是Java高级知识,包括Java并发编程、JVM、常用算法及数据结构等内容。掌握这些知识有助于Java程序员在面试中脱颖而出,也有助于在工作中高效地完成任务。 总的来说,“码神之路独家java面试宝典”是一本很好的Java面试参考书籍,它详细地涵盖了Java开发中的各个方面,为Java程序员提供了全面的知识体系,使他们能够更好地应对面试以及在工作中获取更加卓越的成就。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java登云楼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值