基于SSM的校内信息服务发布系统的设计与实现

末尾获取源码
开发语言:Java
Java开发工具:JDK1.8
后端框架:SSM
前端:Vue
数据库:MySQL5.7和Navicat管理工具结合
服务器:Tomcat8.5
开发软件:IDEA / Eclipse
是否Maven项目:是


目录

一、项目简介

二、系统功能

三、系统项目截图

管理员功能模块实现

管理员登录

信息管理

用户管理

信息类型管理

四、核心代码

登录相关

文件上传

封装


一、项目简介

近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定校内信息服务发布系统的总体功能模块。然后,详细设计系统的主要功能模块,通过数据库设计过程将相关的数据信息存储到数据库中,再通过使用关键的开发工具,如IDEA开发平台、AJAX技术等,编码设计相关的功能模块。接着,主要采用功能测试的方式对系统进行测试,找出系统在运行过程中存在的问题,以及解决问题的方法,不断地改进和完善系统的设计。最后,总结本文介绍的系统的设计和实现过程,并且针对于系统的开发提出未来的展望工作。本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校内信息服务发布系统的信息化建设,极大的方便了相关的工作人员对校内信息服务发布系统信息进行管理。


二、系统功能

本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布新闻等功能



三、系统项目截图

管理员功能模块实现

管理员登录

管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限

 

信息管理

管理员可以通过选择信息管理,管理相关的信息信息记录,比如进行查看信息信息标题,修改信息信息来源等操作

 

用户管理

管理员可以通过选择用户管理,管理相关的用户记录,比如进行查看用户详情,删除错误的用户,发布用户等操作

 

信息类型管理

管理员可以通过选择信息类型管理,管理相关的信息类型信息,比如查看所有信息类型,删除无用信息类型,修改信息类型,添加信息类型等操作

 


四、核心代码

登录相关


package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

文件上传

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;

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public 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);
		FileUtils.copyFile(dest, new File("C:\\Users\\Desktop\\jiadian\\springbootl7own\\src\\main\\resources\\static\\upload"+"/"+fileName));
		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()){
				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
					getResponse().sendError(403);
				}*/
				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);
	}
	
}

封装

package com.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
	}
	
	public static R error() {
		return error(500, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(500, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/302218.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NX/UG二次开发—C\C++开发单个DLL支持多版本NX一种方法

1、去除附加包含目录下的NX相关的lib文件&#xff1a; 2、从对应的dll导出ufun函数和NXopen函数&#xff1a; libufun.dll; libufun_cam.dll; libufun_cae.dll; libufun_die.dll; libufun_vdac.dll; libufun_weld.dll; libugopenint.dll; libugopenint_cae.dll; libugopenint_…

电子版报刊怎么制作

制作电子版报刊是许多媒体和出版机构正在探索的一种新的出版方式。随着数字技术的不断发展&#xff0c;电子版报刊已经成为了一种越来越受欢迎的选择。那么&#xff0c;如何制作电子版报刊呢&#xff1f; 首先&#xff0c;你需要确定你的报刊的主题和受众。这将帮助你选择适合的…

KPU特征识别

前面的颜色识别、二维码识别都是使用了一些简单的图像处理功能&#xff0c;而更高 级的机器视觉就需要使用 KPU 。可以简单类别为计算机的 GPU &#xff08;显卡&#xff09;&#xff0c;本质是 实现高速的图像数据运算 我们来简单介绍一下 K210 的 KPU 。 KPU 是 K21…

Cadence记录

第三讲原理图的绘制和后续处理 一、绘制原理图 1.同一个页面内创建电气互联 连线方式2种 使用连线(wire) 使用网络名&#xff08;net alias&#xff09; 检查网络是否连接&#xff0c;如图显示则好着 2.不同页面之间创建电气互联 左右之分&#xff0c;表示在这个页面的信号是…

锁原理剖析-LockSupport工具类

LockSupport工具类 JDK中的rt.jar包里面的LockSupport是个工具类&#xff0c;它的主要作用是挂起和唤醒线程&#xff0c;该工具类是创建锁和其他同步类的基础。 LockSupport类与每个使用它的线程都会关联一个许可证&#xff0c;在默认情况下调用LockSupport类的方法的线程是不…

第2章 JavaScript基本语法

学习目标 了解什么是变量&#xff0c;能够说出变量的概念 掌握变量的命名规则&#xff0c;能够为变量命名 掌握变量的声明与赋值&#xff0c;能够声明变量并为其赋值 熟悉数据类型的分类&#xff0c;能够说出JavaScript中有哪些数据类型 掌握常用的基本数据类型&#xff0c…

【经验分享】如何看论文的分区、SCI检索号、EI检索号等信息

0 前言 一般而言&#xff0c;被SCI检索的论文&#xff0c;都会同时被EI检索。我们以论文《Learning Disentangled Representation for Multimodal Cross-Domain Sentiment Analysis》为例&#xff0c;讲解一下如何查询论文的各项信息。 我们首先百度这个论文 可以看到它是发表…

什么是企业数字化转型?数字化的价值体现在哪里?

从2015年接触平安的数字化转型&#xff0c;到2021年承接阿里云的服务数字化项目&#xff0c;再到2023年主导大大小小10来个数字化项目&#xff0c;8年的时间&#xff0c;数字化对我而言已经从一个“新词”变成了一个“旧词”。 8年过去&#xff0c;数字化也从一道企业的“选做…

轻松学会电脑如何录制音频

随手录音&#xff0c;保留证据以便后续出现问题进行判定&#xff0c;或者保存会议音频记录方便后续根据录音内容整理自己会议记录不足之处等等&#xff1b;越来越多的地方需要用到录音&#xff0c;那么在电脑上该如何进行音频录制呢&#xff1f;特别是使用比较广泛的Windows电脑…

基础算法【解题思路】:单链表的倒数第k个节点

定义指针p1&#xff0c;让p1走k步&#xff1a; 定义指针p2&#xff0c;在p1走了k步的时候&#xff0c;p2也跟着走。 p1走到最后的时候走了n-k步&#xff0c;停留在最后的null结点。 P2从头结点开始&#xff0c;也跟着走到了n-k步&#xff0c;而n-k恰好是倒数第k个节点。 例…

【Axure高保真原型】日期天数加减计算器

今天和大家分享日期天数加减计算器的原型模板&#xff0c;我们通过这个模板选择指定日期&#xff0c;然后填写需要增加或者减少的天数&#xff0c;点击确认按钮后&#xff0c;就可以计算出对应的结束日期&#xff0c;本案例提供中继器版的日期选择器&#xff0c;以及JS版的日期…

mybatisPlus 将List<String>字段转成json字符串,使用JacksonTypeHandler以及自定义类型处理器实现

文章目录 场景使用JacksonTypeHandler实现类型转换自定义StringListTypeHandler处理器实现 场景 项目中经常需要将List转成json存储到配置文件中, mybatisPlus默认实现了JacksonTypeHandler&#xff0c;GsonTypeHandler&#xff0c;FastjsonTypeHandler&#xff0c;也可以自定义…

@Transactional注解的一个很容易被忽略的错误用法

Transactional注解的一个很容易被忽略的错误用法 今日审查代码时发现对Transactional注解的一个如下用法&#xff1a; //StockController.javaAutoWired private StockService stockService//商品出库 PostMapping("/product/stock/out-stock") public Boolean pro…

利用 hexo 搭建 github page

默认我们已经安装了 node.js git 点击就可以下载啦 然后我们在本地新建一个文件夹&#xff0c;我取的名字是Hexo_blog 然后在命令行处输入 或者 右键 点击 git bash here npm install -g hexo-cli 下一步进行Hexo 初始化和本地预览 初始化并安装所需组件&#xff1a; hexo in…

【Linux驱动】Pinctrl子系统 | GPIO子系统 | 基于子系统的LED驱动程序

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f6f7;Pinctrl子系统&#x1f945;设备树中的Pinctrl子系统 &#x1f6f7;GPIO子系统…

【漏洞复现】Hikvision SPON IP网络对讲广播系统任意文件上传

漏洞描述 IP网络对讲广播系统是一种基于IP网络的高效、可靠、智能的通信解决方案。它支持全双工语音通信、单呼/多呼、组呼/广播等多种通信模式,可以实现跨地域、跨网络的实时通讯。该系统具有灵活的群组管理、智能化的调度和优先级控制功能,可以满足各种场景下的紧急通讯和…

海外動態IP代理地址在網路連接中的作用

海外動態IP代理地址在確保更安全的流覽體驗方面發揮著重要作用&#xff0c;因為線上隱私和安全是最重要的問題。代理地址充當用戶設備和互聯網之間的仲介&#xff0c;提供多種好處&#xff0c;例如增強隱私、訪問地理限制內容以及提高網路性能等。 本文我們將深入探討一下海外…

如何用UE5 的小白人替换成自己的 metahumen 数字人

1、用QuixelBridge 插件导入制作好的metahumen数字人 2、创建项目时如有选择第三人称游戏&#xff0c;在内容目录中找到第三人称游戏小白人的蓝图类&#xff0c;对其进行复制一个&#xff0c;重命名&#xff0c;我这里命名为BP_METAHUMEN&#xff0c; 并移到Metahumen目录下方便…

番外篇-Julius AI帮你做数据分析

今天咱们聊聊如何利用AI大模型来做数据分析&#xff0c;非常适合小白体验&#xff0c;尤其是缺乏项目经验的同学&#xff0c;强烈建议关注收藏&#xff0c;也欢迎私信交流~ 1. 站在巨人肩膀 在数据分析领域&#xff0c;AI技术的飞速发展正引领一场革命。随着大型机器学习模型…

C++设计模式 --1.工厂模式和单例模式

文章目录 1.工厂模式简单工厂模式工厂方法模式抽象工厂模式 2.单例模式懒汉式饿汉式 1.工厂模式 简单工厂模式 抽象产品类 //定义一个抽象水果类 --抽象产品角色 class AbstractFruit { public:virtual void showFruitName()0;//抽取出产品的公共行为&#xff0c; 纯虚函数v…