当前位置: 首页 > news >正文

基于SpringBoot的校园新闻管理系统 计算机毕业设计选题 Java毕业设计 SpringBoot+Vue 前后端分离 [附源码+安装调试]

作者简介:学长编程

✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。

✌CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者。

✌源码、程序设计、仑文、开题报告、任务书、中期检查、代码讲解、答辩PPT。
🍅如果需要源码,文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Java毕业设计

Python毕业设计

微信小程序毕业设计

大数据/机器学习毕业设计


目录

1. 项目背景意义

2. 系统相关技术

2.1 Java语言

2.2 SpringBoot框架

2.3 Vue组件

2.4 MySQL数据库

2.5 HTTP协议

3. 需求分析

4. 系统设计

4.1 系统架构设计

4.2 系统功能结构设计

4.3 数据库设计

5. 系统实现[效果图]

5.1 前台页面

5.2 后台页面

6. 核心代码

6.1 文件上传与下载 

6.2 MyBatisPlus工具类 

6.3 分页工具类

6.4  请求拦截器

7. 论文大纲参考

8. 源码获取


1. 项目背景意义

在数字化时代,校园新闻管理系统作为校园信息传播的重要平台,对于构建和谐校园文化、传递校园动态、增强校园凝聚力具有重要意义。随着信息技术的快速发展,传统的校园新闻传播方式已无法满足师生对信息获取的即时性和便捷性需求。因此,开发一个校园新闻管理系统,不仅可以提高新闻发布的效率,还可以增强师生的互动交流,提升校园文化的传播力。

该系统通过整合校园新闻、公告、论坛等多种信息资源,为师生提供一个全面、及时、互动的信息服务平台。管理员可以通过系统高效地管理新闻发布、用户反馈和论坛交流,而用户则可以方便地获取新闻资讯、参与论坛讨论和收藏感兴趣的内容。通过这样的系统,可以极大地提升校园信息的传播效率和质量,促进校园文化的繁荣发展。

2. 系统相关技术

2.1 Java语言

Java是一种面向对象的编程语言,由Sun Microsystems公司于1995年发布。它具有跨平台、安全性高、可移植性强等特点,广泛应用于企业级应用、Android移动应用、Web开发等领域。Java语言的核心优势在于其庞大的生态系统,拥有丰富的类库和框架,能够帮助开发者快速构建稳定、高效的应用程序。此外,Java的垃圾回收机制有效降低了内存管理的复杂性,使开发者能够更专注于业务逻辑的实现。

2.2 SpringBoot框架

SpringBoot是基于Spring框架的快速开发框架,旨在简化新Spring应用的初始搭建和开发过程。它提供了默认的配置、内置的Tomcat服务器、自动配置等功能,使得开发者能够迅速启动一个独立的、生产级别的基于Spring的应用。SpringBoot通过“约定优于配置”的原则,减少了大量繁琐的配置工作,提高了开发效率。同时,它还整合了众多优秀的第三方库,为微服务架构和云原生应用提供了良好的支持。

2.3 Vue组件

Vue.js是一款渐进式JavaScript框架,由尤雨溪于2014年发布。Vue的核心思想是数据驱动和组件化开发,使得前端开发者能够更加高效地构建用户界面。Vue组件是Vue应用的基础单元,具有独立的逻辑和样式,易于复用和维护。通过组件化开发,开发者可以将复杂的页面拆分成多个小组件,实现代码的模块化。Vue组件支持props、events、slots等特性,使得组件之间的通信变得简单,大大提高了前端开发的效率。

2.4 MySQL数据库

MySQL是一款广泛使用的开源关系型数据库管理系统,由瑞典MySQL AB公司开发。它具有高性能、易使用、成本低等特点,适用于中小型网站和企业级应用。MySQL支持多种存储引擎,如InnoDB、MyISAM等,以满足不同场景下的需求。此外,MySQL还提供了强大的数据查询、索引、事务处理等功能,保证了数据的完整性和一致性。由于其良好的生态和社区支持,MySQL已成为众多企业和开发者首选的数据库系统。

2.5 HTTP协议

HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它定义了客户端和服务器之间请求与响应的格式,是互联网上数据交换的基础。HTTP协议基于TCP/IP模型,具有无状态、简单易扩展等特点。随着互联网的发展,HTTP协议也在不断进化,如引入HTTPS(HTTP Secure)加密数据传输、HTTP/2多路复用等技术,提高了数据传输的安全性和效率。如今,HTTP协议已成为Web应用开发不可或缺的一部分。

3. 需求分析

前端用户需求
  1. 登录与注册:用户需要能够通过系统进行账号的注册和登录,确保个人信息的安全。
  2. 论坛交流:提供一个交流平台,让用户可以就校园新闻、公告等话题进行讨论。
  3. 公告信息:用户可以查看校园的最新公告,包括活动通知、重要事项等。
  4. 新闻信息:用户可以浏览校园新闻,了解校园动态。
  5. 个人中心:用户可以在个人中心查看个人信息、收藏新闻等。
后端管理员需求
  1. 登录:管理员需要通过系统进行登录,以管理校园新闻相关事务。
  2. 首页管理:管理员可以更新首页展示的信息,如轮播图、重要公告等。
  3. 个人中心管理:管理员可以查看用户的个人信息和操作记录。
  4. 管理员管理:系统管理员可以对其他管理员进行权限分配和管理。
  5. 基础数据管理:管理员可以管理帖子类型、公告类型、新闻类型等基础数据。
  6. 论坛交流管理:管理员可以管理论坛帖子,确保论坛内容的健康。
  7. 公告信息管理:管理员可以发布和管理校园公告。
  8. 新闻管理:管理员可以发布和管理校园新闻。
  9. 用户管理:管理员可以对用户进行审核、权限分配等操作。
  10. 轮播图管理:管理员可以更新首页的轮播图,展示校园的精彩瞬间。

通过满足以上需求,校园新闻管理系统将极大地提升校园信息的传播效率和质量,增强师生的互动交流,促进校园文化的繁荣发展。

4. 系统设计

4.1 系统架构设计

4.2 系统功能结构设计

校园新闻管理系统

├── 前端功能模块
│   ├── 登录
│   ├── 注册
│   ├── 论坛交流
│   ├── 公告信息
│   ├── 新闻信息
│   └── 个人中心
│       ├── 个人信息
│       └── 新闻收藏

└── 后端功能模块
    ├── 登录
    ├── 首页
    ├── 个人中心
    ├── 管理员管理
    ├── 基础数据管理
    │   ├── 帖子类型管理
    │   ├── 公告类型管理
    │   └── 新闻类型管理
    ├── 论坛交流管理
    ├── 公告信息管理
    ├── 新闻管理
    ├── 用户管理
    └── 轮播图管理

4.3 数据库设计

 -- ----------------------------
-- Table structure for config
-- ----------------------------
DROP TABLE IF EXISTS `config`;
CREATE TABLE `config` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(100) NOT NULL COMMENT '配置参数名称',`value` varchar(100) DEFAULT NULL COMMENT '配置参数值',`url` varchar(500) DEFAULT NULL COMMENT 'url',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';-- ----------------------------
-- Table structure for storeup
-- ----------------------------
DROP TABLE IF EXISTS `storeup`;
CREATE TABLE `storeup` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`userid` bigint(20) NOT NULL COMMENT '用户id',`refid` bigint(20) DEFAULT NULL COMMENT '商品id',`tablename` varchar(200) DEFAULT NULL COMMENT '表名',`name` varchar(200) NOT NULL COMMENT '名称',`picture` longtext COMMENT '图片',`type` varchar(200) DEFAULT '1' COMMENT '类型',`inteltype` varchar(200) DEFAULT NULL COMMENT '推荐类型',`remark` varchar(200) DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='收藏表';-- ----------------------------
-- Table structure for systemintro
-- ----------------------------
DROP TABLE IF EXISTS `systemintro`;
CREATE TABLE `systemintro` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`title` varchar(200) NOT NULL COMMENT '标题',`subtitle` varchar(200) DEFAULT NULL COMMENT '副标题',`content` longtext NOT NULL COMMENT '内容',`picture1` longtext COMMENT '图片1',`picture2` longtext COMMENT '图片2',`picture3` longtext COMMENT '图片3',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='系统简介';-- ----------------------------
-- Table structure for token
-- ----------------------------
DROP TABLE IF EXISTS `token`;
CREATE TABLE `token` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`userid` bigint(20) NOT NULL COMMENT '用户id',`username` varchar(100) NOT NULL COMMENT '用户名',`tablename` varchar(100) DEFAULT NULL COMMENT '表名',`role` varchar(100) DEFAULT NULL COMMENT '角色',`token` varchar(200) NOT NULL COMMENT '密码',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',`expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='token表';-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(100) NOT NULL COMMENT '用户名',`password` varchar(100) NOT NULL COMMENT '密码',`image` varchar(200) DEFAULT NULL COMMENT '头像',`role` varchar(100) DEFAULT '管理员' COMMENT '角色',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户表';-- ----------------------------
-- Table structure for yonghu
-- ----------------------------
DROP TABLE IF EXISTS yonghu
CREATE TABLE `yonghu` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`yonghuzhanghao` varchar(200) NOT NULL COMMENT '学号',`mima` varchar(200) NOT NULL COMMENT '密码',`xingming` varchar(200) NOT NULL COMMENT '姓名',`xingbie` varchar(200) DEFAULT NULL COMMENT '性别',`touxiang` longtext COMMENT '头像',`xibie` varchar(200) DEFAULT NULL COMMENT '系别',`banji` varchar(200) DEFAULT NULL COMMENT '班级',`zhuanye` varchar(200) DEFAULT NULL COMMENT '专业',`nianling` varchar(200) DEFAULT NULL COMMENT '年龄',PRIMARY KEY (`id`),UNIQUE KEY `yonghuzhanghao` (`yonghuzhanghao`)
) ENGINE=InnoDB AUTO_INCREMENT=1712157685850 DEFAULT CHARSET=utf8 COMMENT='用户';

5. 系统实现[效果图]

5.1 前台页面

5.2 后台页面

6. 核心代码

6.1 文件上传与下载 


package com.controller;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;/*** 上传文件映射表* @author 学长编程**/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{@Autowiredprivate ConfigService configService;/*** 上传文件*/@RequestMapping("/upload")@IgnoreAuthpublic R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {if (file.isEmpty()) {throw new EIException("上传文件不能为空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}String fileName = new Date().getTime()+"."+fileExt;File dest = new File(upload.getAbsolutePath()+"/"+fileName);file.transferTo(dest);if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}/*** 下载文件*/@IgnoreAuth@RequestMapping("/download")public ResponseEntity<byte[]> download(@RequestParam String fileName) {try {File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}File file = new File(upload.getAbsolutePath()+"/"+fileName);if(file.exists()){HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    headers.setContentDispositionFormData("attachment", fileName);    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}} catch (IOException e) {e.printStackTrace();}return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);}}

6.2 MyBatisPlus工具类 


package com.utils;import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;import org.apache.commons.lang3.StringUtils;import cn.hutool.core.bean.BeanUtil;import com.baomidou.mybatisplus.mapper.Wrapper;/*** Mybatis-Plus工具类* @author 学长编程**/
public class MPUtil {public static final char UNDERLINE = '_';//mybatis plus allEQ 表达式转换public static Map allEQMapPre(Object bean,String pre) {Map<String, Object> map =BeanUtil.beanToMap(bean);return camelToUnderlineMap(map,pre);}//mybatis plus allEQ 表达式转换public static Map allEQMap(Object bean) {Map<String, Object> map =BeanUtil.beanToMap(bean);return camelToUnderlineMap(map,"");}public static Wrapper allLikePre(Wrapper wrapper,Object bean,String pre) {Map<String, Object> map =BeanUtil.beanToMap(bean);Map result = camelToUnderlineMap(map,pre);return genLike(wrapper,result);}public static Wrapper allLike(Wrapper wrapper,Object bean) {Map result = BeanUtil.beanToMap(bean, true, true);			 return genLike(wrapper,result);}public static Wrapper genLike( Wrapper wrapper,Map param) {Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();int i=0;while (it.hasNext()) {if(i>0) wrapper.and();Map.Entry<String, Object> entry = it.next();String key = entry.getKey();String value = (String) entry.getValue();wrapper.like(key, value);i++;}return wrapper;}public static Wrapper likeOrEq(Wrapper wrapper,Object bean) {Map result = BeanUtil.beanToMap(bean, true, true);			 return genLikeOrEq(wrapper,result);}public static Wrapper genLikeOrEq( Wrapper wrapper,Map param) {Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();int i=0;while (it.hasNext()) {if(i>0) wrapper.and();Map.Entry<String, Object> entry = it.next();String key = entry.getKey();if(entry.getValue().toString().contains("%")) {wrapper.like(key, entry.getValue().toString().replace("%", ""));} else {wrapper.eq(key, entry.getValue());}i++;}return wrapper;}public static Wrapper allEq(Wrapper wrapper,Object bean) {Map result = BeanUtil.beanToMap(bean, true, true);			 return genEq(wrapper,result);}public static Wrapper genEq( Wrapper wrapper,Map param) {Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();int i=0;while (it.hasNext()) {if(i>0) wrapper.and();Map.Entry<String, Object> entry = it.next();String key = entry.getKey();wrapper.eq(key, entry.getValue());i++;}return wrapper;}public static Wrapper between(Wrapper wrapper,Map<String, Object> params) {for(String key : params.keySet()) {String columnName = "";if(key.endsWith("_start")) {columnName = key.substring(0, key.indexOf("_start"));if(StringUtils.isNotBlank(params.get(key).toString())) {wrapper.ge(columnName, params.get(key));}}if(key.endsWith("_end")) {columnName = key.substring(0, key.indexOf("_end"));if(StringUtils.isNotBlank(params.get(key).toString())) {wrapper.le(columnName, params.get(key));}}}return wrapper;}public static Wrapper sort(Wrapper wrapper,Map<String, Object> params) {String order = "";if(params.get("order") != null && StringUtils.isNotBlank(params.get("order").toString())) {order = params.get("order").toString();}if(params.get("sort") != null && StringUtils.isNotBlank(params.get("sort").toString())) {if(order.equalsIgnoreCase("desc")) {wrapper.orderDesc(Arrays.asList(params.get("sort")));} else {wrapper.orderAsc(Arrays.asList(params.get("sort")));}}return wrapper;}/*** 驼峰格式字符串转换为下划线格式字符串* * @param param* @return*/public static String camelToUnderline(String param) {if (param == null || "".equals(param.trim())) {return "";}int len = param.length();StringBuilder sb = new StringBuilder(len);for (int i = 0; i < len; i++) {char c = param.charAt(i);if (Character.isUpperCase(c)) {sb.append(UNDERLINE);sb.append(Character.toLowerCase(c));} else {sb.append(c);}}return sb.toString();}public static void main(String[] ages) {System.out.println(camelToUnderline("ABCddfANM"));}public static Map camelToUnderlineMap(Map param, String pre) {Map<String, Object> newMap = new HashMap<String, Object>();Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, Object> entry = it.next();String key = entry.getKey();String newKey = camelToUnderline(key);if (pre.endsWith(".")) {newMap.put(pre + newKey, entry.getValue());} else if (StringUtils.isEmpty(pre)) {newMap.put(newKey, entry.getValue());} else {newMap.put(pre + "." + newKey, entry.getValue());}}return newMap;}
}

6.3 分页工具类

package com.utils;import java.io.Serializable;
import java.util.List;
import java.util.Map;import com.baomidou.mybatisplus.plugins.Page;/*** 分页工具类* @author 学长编程**/
public class PageUtils implements Serializable {private static final long serialVersionUID = 1L;//总记录数private long total;//每页记录数private int pageSize;//总页数private long totalPage;//当前页数private int currPage;//列表数据private List<?> list;/*** 分页* @param list        列表数据* @param totalCount  总记录数* @param pageSize    每页记录数* @param currPage    当前页数*/public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {this.list = list;this.total = totalCount;this.pageSize = pageSize;this.currPage = currPage;this.totalPage = (int)Math.ceil((double)totalCount/pageSize);}/*** 分页*/public PageUtils(Page<?> page) {this.list = page.getRecords();this.total = page.getTotal();this.pageSize = page.getSize();this.currPage = page.getCurrent();this.totalPage = page.getPages();}/** 空数据的分页*/public PageUtils(Map<String, Object> params) {Page page =new Query(params).getPage();new PageUtils(page);}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getCurrPage() {return currPage;}public void setCurrPage(int currPage) {this.currPage = currPage;}public List<?> getList() {return list;}public void setList(List<?> list) {this.list = list;}public long getTotalPage() {return totalPage;}public void setTotalPage(long totalPage) {this.totalPage = totalPage;}public long getTotal() {return total;}public void setTotal(long total) {this.total = total;}}

6.4  请求拦截器


package com.interceptor;import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.http.HttpStatus;import com.annotation.IgnoreAuth;
import com.entity.EIException;
import com.entity.TokenEntity;
import com.service.TokenService;
import com.utils.R;/*** 权限(Token)验证* @author 学长编程**/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {public static final String LOGIN_TOKEN_KEY = "Token";@Autowiredprivate TokenService tokenService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//支持跨域请求response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {response.setStatus(HttpStatus.OK.value());return false;}IgnoreAuth annotation;if (handler instanceof HandlerMethod) {annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);} else {return true;}//从header中获取tokenString token = request.getHeader(LOGIN_TOKEN_KEY);/*** 不需要验证权限的方法直接放过*/if(annotation!=null) {return true;}TokenEntity tokenEntity = null;if(StringUtils.isNotBlank(token)) {tokenEntity = tokenService.getTokenEntity(token);}if(tokenEntity != null) {request.getSession().setAttribute("userId", tokenEntity.getUserid());request.getSession().setAttribute("role", tokenEntity.getRole());request.getSession().setAttribute("tableName", tokenEntity.getTablename());request.getSession().setAttribute("username", tokenEntity.getUsername());return true;}PrintWriter writer = null;response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");try {writer = response.getWriter();writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));} finally {if(writer != null){writer.close();}}return false;}
}

7. 论文大纲参考

8. 源码获取

喜欢文章可以关注、点赞、收藏啦,不懂问题评论区留言!

 👇🏻 更多项目推荐👇🏻 可以去看看哟

Java毕业设计

Python毕业设计

微信小程序毕业设计

大数据/机器学习毕业设计

获取源码下面扫描


http://www.mrgr.cn/news/46489.html

相关文章:

  • Docker Compose 教程
  • 金融项目实战 01|功能测试分析与设计
  • 电脑分辨率调到为多少最佳?电脑分辨率最佳设置
  • 深入Android架构(从线程到AIDL)_22 IPC的Proxy-Stub设计模式04
  • 实战开发:基于用户反馈筛选与分析系统的实现
  • pytest+allure 入门
  • MAX模型转为las点云模型
  • 响应速度相关知识
  • 汽车胶黏剂市场研究:预计2030年全球市场规模将达到67.4亿美元
  • Apache Flink 配合 Debezium 连接器来捕获 Oracle 数据库变更日志的应用
  • 图像平滑处理
  • 基于vue框架的大学生在线教育jp6jw(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • IDEA 输入英文字体变了的问题
  • 【宽搜】6. leetcode 513 找树左下角的值
  • patch函数前两个参数位
  • c++输出保留n位小数
  • 默认情况下,`QTableView`中的单元格内容是不支持自动换行的,而是将文本截断或者显示省略号。要实现内容自动换行。要用Delegate
  • 鹧鸪云光伏软件全面解析
  • Web3与人工智能的交叉应用探索
  • 【深度学习总结】热力图-Grad-CAM使用
  • whistle使用实践
  • Linux内核 -- 使用 `proc_create_seq` 和 `seq_operations` 快速创建 /proc 文件
  • VAE(与GAN)
  • k8s pod详解使用
  • 【系统架构设计师】案例专题二:系统开发基础考点梳理
  • IPguard与Ping32:安全性、易用性与稳定性全面对比