项目学习:仿b站的视频网站项目06 -视频分类01

概括

本篇主要是介绍项目的结构更改以及拦截器配置和视频分类数据库文件。

项目结构更改

1、将全局异常抽出到common目录下来进行统一管理。

2、在admin目录项新建interceptor目录来定义拦截器,当有请求访问后端地址时进行Token校验。

拦截器定义

创建一个类来实现HandlerInterceptor这个接口。通过实现该接口提供的方法来对请求前、请求中、请求后来进行处理,有点aop切面的味道。

然后再创建一个类来实现WebMvcConfigurer这个接口。通过重写addInterceptors方法来将上面定义的接口注册进去管理。

参考代码如下所示:
AppInterceptor

java 复制代码
package com.easylive.admin.interceptor;

import com.easylive.component.RedisComponent;
import com.easylive.entity.constants.Constants;
import com.easylive.enums.ResponseCodeEnum;
import com.easylive.exception.BusinessException;
import com.easylive.utils.StringTools;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class AppInterceptor implements HandlerInterceptor {


    @Resource
    private RedisComponent redisComponent;
    private  final static String URL_ACCOUNT = "/account";
    private  final static String URL_FILE = "/file";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        if (null == handler){
            return false;
        }

        if (!(handler instanceof HandlerMethod)){
            return false;
        }

        if (request.getRequestURI().contains(URL_ACCOUNT)){
            return true;
        }

        String token = request.getHeader(Constants.TOKEN_ADMIN);

//        图片
        if (request.getRequestURI().contains(URL_FILE)){
            token = getToken4Cookie(request);
        }

        if (StringTools.isEmpty(token)){
            throw new BusinessException(ResponseCodeEnum.CODE_901);
        }

        Object sessionObj = redisComponent.getTokenInfo4Admin(token);
        if (null == sessionObj){
            throw new BusinessException(ResponseCodeEnum.CODE_901);
        }

        return true;
    }

    private String getToken4Cookie(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            String token = null;
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(Constants.TOKEN_ADMIN)) {
                    token = cookie.getValue();
                    break;
                }
            }
            return token;
        }
        return null;

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

WebAppConfigure

java 复制代码
package com.easylive.admin.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

@Configuration
public class WebAppConfigure implements WebMvcConfigurer {

    @Resource
    private AppInterceptor appInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(appInterceptor).addPathPatterns("/**");

    }
}

数据库文件

下面是视频分类的数据库文件,提供,仅供参考。

sql 复制代码
CREATE TABLE `category_info` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增分类ID',
  `category_code` varchar(30) NOT NULL COMMENT '分类编码',
  `category_name` varchar(30) NOT NULL COMMENT '分类名称',
  `p_category_id` int(11) NOT NULL COMMENT '父类分类id',
  `icon` varchar(50) DEFAULT NULL COMMENT '图标',
  `background` varchar(50) DEFAULT NULL COMMENT '背景图',
  `sort` tinyint(4) NOT NULL COMMENT '排序号',
  PRIMARY KEY (`category_id`) USING BTREE,
  UNIQUE KEY `idx_key_category_code` (`category_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类表';
相关推荐
魔法阵维护师31 分钟前
从零开发游戏需要学习的c#模块,第三十章(掉落物品 —— 血包与能量)
学习·游戏·c#
在学了加油32 分钟前
Inception v1学习笔记
笔记·python·学习
是一个Bug39 分钟前
LangChain 入门完全指南:核心概念、学习路线与实战 Demo
学习·langchain
晓梦林1 小时前
EVA靶场学习笔记
android·笔记·学习
AI算法沐枫1 小时前
基于YOLO26深度学习的【果园荔枝检测与计数】系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
开发语言·人工智能·python·深度学习·qt·学习·机器学习
OBiO20131 小时前
精准靶向心肌细胞的AAV怎么选择?
学习
不羁的木木1 小时前
ArkWeb实战学习笔记02-环境搭建与基础配置
笔记·学习·harmonyos
stars-he1 小时前
SPICE编程与仿真学习笔记:从网表到瞬态分析
笔记·学习·硬件工程
江苏世纪龙科技1 小时前
科鲁兹虚拟系统破解汽车实训“三难“:工位少、组织难、评价弱
学习
小拉达不是臭老鼠1 小时前
Unity数据持久化_Json
学习·unity