Java项目:学生学科竞赛管理管理系统设计和实现(java+springboot+ssm+maven)
源码获取:博客首页 "资源" 里下载!
主要技术、spring、 springmvc、 springboot、 mybatis 、 jquery 、 layUI、md5 、bootstarp.js tomcat、、拦截器等项目
主要功能:登录、用户、菜单管理、角色管理、权限管理、立项申请、报名、结、经费管理、审核、统计等
用户登录:输入账号密码和验证码登录登录、登陆后根据用户权限显示不同菜单、角色灵活控制。
管理后主要功能模块:用户管理、角色管理、承菜管理、权限管理、竞赛报名管理、经费申请和审核管理、项目结题管理、立项申请管理等具体功能
用户管理:用户列表的显示、数据的添加以及删除修改等操作。
角色管理:通过给用户绑定角色、角色控制菜单灵活显示菜单权限功能。用户可以新建多角色
菜单管理:
系统日志监控:aop切面编程实现日志记录操作
业务模块功能;
立项申请:
立项审核:
活动经费预算申请:
立项申请个人赛以及团队赛报名管理:录入报名相关信息字段
项目结题管理:
项目完成之后选择项目进行资金使用统计结题:录入金额
项目结题统计:
代码结构:idea、eclipse直接导入就可运行
数据库图:
项目文档报告主要设计:
XSS过滤处理业务:
/*** XSS过滤处理**/
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {/*** 没被包装过的HttpServletRequest(特殊场景,需要自己过滤)*/HttpServletRequest orgRequest;/*** html过滤*/private final static HTMLFilter htmlFilter = new HTMLFilter();public XssHttpServletRequestWrapper(HttpServletRequest request) {super(request);orgRequest = request;}@Overridepublic ServletInputStream getInputStream() throws IOException {//非json类型,直接返回if(!MediaType.APPLICATION_JSON_VALUE.equalsIgnoreCase(super.getHeader(HttpHeaders.CONTENT_TYPE))){return super.getInputStream();}//为空,直接返回String json = IOUtils.toString(super.getInputStream(), "utf-8");if (StringUtils.isBlank(json)) {return super.getInputStream();}//xss过滤json = xssEncode(json);final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes("utf-8"));return new ServletInputStream() {@Overridepublic boolean isFinished() {return true;}@Overridepublic boolean isReady() {return true;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() throws IOException {return bis.read();}};}@Overridepublic String getParameter(String name) {String value = super.getParameter(xssEncode(name));if (StringUtils.isNotBlank(value)) {value = xssEncode(value);}return value;}@Overridepublic String[] getParameterValues(String name) {String[] parameters = super.getParameterValues(name);if (parameters == null || parameters.length == 0) {return null;}for (int i = 0; i < parameters.length; i++) {parameters[i] = xssEncode(parameters[i]);}return parameters;}@Overridepublic Map<String,String[]> getParameterMap() {Map<String,String[]> map = new LinkedHashMap<>();Map<String,String[]> parameters = super.getParameterMap();for (String key : parameters.keySet()) {String[] values = parameters.get(key);for (int i = 0; i < values.length; i++) {values[i] = xssEncode(values[i]);}map.put(key, values);}return map;}@Overridepublic String getHeader(String name) {String value = super.getHeader(xssEncode(name));if (StringUtils.isNotBlank(value)) {value = xssEncode(value);}return value;}private String xssEncode(String input) {return htmlFilter.filter(input);}/*** 获取最原始的request*/public HttpServletRequest getOrgRequest() {return orgRequest;}/*** 获取最原始的request*/public static HttpServletRequest getOrgRequest(HttpServletRequest request) {if (request instanceof XssHttpServletRequestWrapper) {return ((XssHttpServletRequestWrapper) request).getOrgRequest();}return request;}}
SQL过滤业务:
/*** SQL过滤**/
public class SQLFilter {/*** SQL注入过滤* @param str 待验证的字符串*/public static String sqlInject(String str){if(StringUtils.isBlank(str)){return null;}//去掉'|"|;|\字符str = StringUtils.replace(str, "'", "");str = StringUtils.replace(str, "\"", "");str = StringUtils.replace(str, ";", "");str = StringUtils.replace(str, "\\", "");//转换成小写str = str.toLowerCase();//非法字符String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"};//判断是否包含非法字符for(String keyword : keywords){if(str.indexOf(keyword) != -1){throw new RRException("包含非法字符");}}return str;}
}
系统用户业务操作:
/*** 系统用户*/
@RestController
@RequestMapping("/sys/user")
public class SysUserController extends AbstractController {@Autowiredprivate SysUserService sysUserService;@Autowiredprivate SysUserRoleService sysUserRoleService;/*** 所有用户列表*/@RequestMapping("/list")@RequiresPermissions("sys:user:list")public R list(@RequestParam Map<String, Object> params){PageUtils page = sysUserService.queryPage(params);return R.ok().put("page", page);}/*** 获取登录的用户信息*/@RequestMapping("/info")public R info(){return R.ok().put("user", getUser());}/*** 修改登录用户密码*/@SysLog("修改密码")@RequestMapping("/password")public R password(String password, String newPassword){Assert.isBlank(newPassword, "新密码不为能空");//原密码password = ShiroUtils.sha256(password, getUser().getSalt());//新密码newPassword = ShiroUtils.sha256(newPassword, getUser().getSalt());//更新密码boolean flag = sysUserService.updatePassword(getUserId(), password, newPassword);if(!flag){return R.error("原密码不正确");}return R.ok();}/*** 用户信息*/@RequestMapping("/info/{userId}")@RequiresPermissions("sys:user:info")public R info(@PathVariable("userId") Long userId){SysUserEntity user = sysUserService.getById(userId);//获取用户所属的角色列表List<Long> roleIdList = sysUserRoleService.queryRoleIdList(userId);user.setRoleIdList(roleIdList);return R.ok().put("user", user);}/*** 保存用户*/@SysLog("保存用户")@RequestMapping("/save")@RequiresPermissions("sys:user:save")public R save(@RequestBody SysUserEntity user){ValidatorUtils.validateEntity(user, AddGroup.class);sysUserService.saveUser(user);return R.ok();}/*** 修改用户*/@SysLog("修改用户")@RequestMapping("/update")@RequiresPermissions("sys:user:update")public R update(@RequestBody SysUserEntity user){ValidatorUtils.validateEntity(user, UpdateGroup.class);sysUserService.update(user);return R.ok();}/*** 删除用户*/@SysLog("删除用户")@RequestMapping("/delete")@RequiresPermissions("sys:user:delete")public R delete(@RequestBody Long[] userIds){if(ArrayUtils.contains(userIds, 1L)){return R.error("系统管理员不能删除");}if(ArrayUtils.contains(userIds, getUserId())){return R.error("当前用户不能删除");}sysUserService.removeByIds(Arrays.asList(userIds));return R.ok();}
}
系统配置信息:
/*** 系统配置信息**/
@RestController
@RequestMapping("/sys/config")
public class SysConfigController extends AbstractController {@Autowiredprivate SysConfigService sysConfigService;/*** 所有配置列表*/@RequestMapping("/list")@RequiresPermissions("sys:config:list")public R list(@RequestParam Map<String, Object> params){PageUtils page = sysConfigService.queryPage(params);return R.ok().put("page", page);}/*** 配置信息*/@RequestMapping("/info/{id}")@RequiresPermissions("sys:config:info")@ResponseBodypublic R info(@PathVariable("id") Long id){SysConfigEntity config = sysConfigService.getById(id);return R.ok().put("config", config);}/*** 保存配置*/@SysLog("保存配置")@RequestMapping("/save")@RequiresPermissions("sys:config:save")public R save(@RequestBody SysConfigEntity config){ValidatorUtils.validateEntity(config);sysConfigService.saveConfig(config);return R.ok();}/*** 修改配置*/@SysLog("修改配置")@RequestMapping("/update")@RequiresPermissions("sys:config:update")public R update(@RequestBody SysConfigEntity config){ValidatorUtils.validateEntity(config);sysConfigService.update(config);return R.ok();}/*** 删除配置*/@SysLog("删除配置")@RequestMapping("/delete")@RequiresPermissions("sys:config:delete")public R delete(@RequestBody Long[] ids){sysConfigService.deleteBatch(ids);return R.ok();}}
文件上传业务:
/*** 文件上传*/
@RestController
@RequestMapping("sys/oss")
public class SysOssController {@Autowiredprivate SysOssService sysOssService;@Autowiredprivate SysConfigService sysConfigService;private final static String KEY = ConfigConstant.CLOUD_STORAGE_CONFIG_KEY;/*** 列表*/@RequestMapping("/list")@RequiresPermissions("sys:oss:all")public R list(@RequestParam Map<String, Object> params){PageUtils page = sysOssService.queryPage(params);return R.ok().put("page", page);}/*** 云存储配置信息*/@RequestMapping("/config")@RequiresPermissions("sys:oss:all")public R config(){CloudStorageConfig config = sysConfigService.getConfigObject(KEY, CloudStorageConfig.class);return R.ok().put("config", config);}/*** 保存云存储配置信息*/@RequestMapping("/saveConfig")@RequiresPermissions("sys:oss:all")public R saveConfig(@RequestBody CloudStorageConfig config){//校验类型ValidatorUtils.validateEntity(config);if(config.getType() == Constant.CloudService.QINIU.getValue()){//校验七牛数据ValidatorUtils.validateEntity(config, QiniuGroup.class);}else if(config.getType() == Constant.CloudService.ALIYUN.getValue()){//校验阿里云数据ValidatorUtils.validateEntity(config, AliyunGroup.class);}else if(config.getType() == Constant.CloudService.QCLOUD.getValue()){//校验腾讯云数据ValidatorUtils.validateEntity(config, QcloudGroup.class);}sysConfigService.updateValueByKey(KEY, new Gson().toJson(config));return R.ok();}/*** 上传文件*/@RequestMapping("/upload")@RequiresPermissions("sys:oss:all")public R upload(@RequestParam("file") MultipartFile file) throws Exception {if (file.isEmpty()) {throw new RRException("上传文件不能为空");}//上传文件String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));String url = OSSFactory.build().uploadSuffix(file.getBytes(), suffix);//保存文件信息SysOssEntity ossEntity = new SysOssEntity();ossEntity.setUrl(url);ossEntity.setCreateDate(new Date());sysOssService.save(ossEntity);return R.ok().put("url", url);}/*** 删除*/@RequestMapping("/delete")@RequiresPermissions("sys:oss:all")public R delete(@RequestBody Long[] ids){sysOssService.removeByIds(Arrays.asList(ids));return R.ok();}}
源码获取:博客首页 "资源" 里下载!
相关文章:

update 改写 merge into
update语句改写成merge into有时会提高运行速度 看两个案例 1.根据业务将两个嵌套子查询改写成max,速度有3min提升到3s UPDATE OPER_792.LL_SCB_YDKB_20120730 A SET A.DCP (SELECT B.PROD_OFFER_NAME FROM OPER_792.YD_TC B WHERE A.SERV_ID B.SERV_ID AND B.TC_…

CCControlSwitch 、CCControlSlider、CCControlButton
/**bool hasMoved(); 这里获取的不是开关是否正在被用户拨动,而是开关最终的状态是由用户手动拨动开关进行的,*还是用户点击开关进行的状态更改*/CCControlSwitch* pSwitch CCControlSwitch::create(CCSprite::create("switch-mask.png"),CCS…

bzoj2961 共点圆 (CDQ分治, 凸包)
/* 可以发现可行的圆心相对于我们要查询的点是在一个半平面上, 然后我们要做的就是动态维护凸壳然后用这个半平面去切它 看看是否是在合法的那一面然后cdq分治就可以了代码基本是抄的,*/#include<cstdio> #include<algorithm> #include<c…

Rocksdb Iterator实现:从DBIter 到 TwoLevelIter 的漫长链路
文章目录1. 迭代器简单介绍2. 迭代器用户态相关接口3. 迭代器内部架构4. 迭代器的入口实现4.1 DBIter4.2 MergingIterator4.3 Memtable系列Iterator4.4 LevelIterator 和 TwoLevelIteratorps:本文的基础迭代器设计 以及 相关代码 是基于rocksdb 6.4.6版本进行描述的…

Java项目:OA办公自动化系统设计和实现(java+springboot+freemarker+mysql+maven+mybatis+jpa)
源码获取:博客首页 "资源" 里下载! java springbootOA办公自动化系统: 主要功能模块:系统、用户、角色、考勤、流程、公告、邮件、任务、日程、计划、文件、笔记、通讯录、讨论区等多个模块管理 使用Maven进行项目管理…

UIScrollView上面放一个UIScrollView或者UITableView拖动时候 View出现一闪一闪解决办法...
在项目中发现一个问题: 创建一个UIScrollView 上面放一个scrollView或者TableView,拖动scrollview或TableView 画面出现一闪一闪的情况。 解决办法设置一下UIScrollView的contentSize 如果你是上下滑动scrollView.contentSize CGSizeMake(0, self.view.…

理解koa-router 路由一般使用
阅读目录 一:理解koa-router一般的路由二:理解koa-router命名路由三:理解koa-router多个中间件使用四:理解koa-router嵌套路由五:分割路由文件回到顶部一:理解koa-router一般的路由 koa-router是koa的路由库…

Go 分布式学习利器(20)-- Go并发编程之多路选择和超时控制,channel的关闭和广播
Select 多路选择 基本使用语法如下: select { case ret : <-retCh1: //阻塞事件,等待channel1的消息t.Logf("result %s \n",ret) case ret : <-retCh2:t.Logf("result %s \n", rest) default :t.Error("return empty&q…

Java项目:网盘系统设计和实现(java+ssm+jpa)
源码获取:博客首页 "资源" 里下载! 很多同学都有自己的网盘,方便存储一些java学习教程。该毕业设计实现了一个简易的网盘,包含文件上传和文件分享等功能。 后端技术采用了spring,spring mvc,JPA&…

快速学习的方法论
大多数人认为学习的快慢取决于学习者的天赋,实际上研究表明学习方法起着至关重要的作用。更深层次的知识加工,与时而反复的温故知新,在某些情况下会加倍你的学习效率。最近学习了如何快速学习的方法论,分享给大家。 是否能加速理解…

C#拉姆达(=)表达式
前言: 之前小猪曾经分享过自己对C#委托的一点理解 其实在使用委托的过程中我们会大量的使用拉姆达(>)表达式 介绍: "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写…
Python爬虫入门教程 57-100 python爬虫高级技术之验证码篇3-滑动验证码识别技术
滑动验证码介绍 本篇博客涉及到的验证码为滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成。 这类验证码不常见了,官方介绍地址为:https://promotion.aliyun.com/ntms/act/captchaI…

FlameScope 更高级全面的火焰图
FlameScope 更高级全面的火焰图 文章目录FlameScope 更高级全面的火焰图安装步骤安装问题fix使用方式网飞(Netflix)开发的火焰图工具能够更好得呈现出一段时间内的服务器on/off cpu 的热力图。安装步骤 $ git clone https://github.com/Netflix/flamescope $ cd flamescope $ …

sql 基础--mysql 5 (6)
12.子查询 子查询进行过滤 mysql> select msg from pw_luck where name wang5-> ; ------ | msg | ------ | 1001 | | 1000 | | 1000 | | 100 | | 100 | ------ 5 rows in set (0.03 sec)mysql> select uid from pw_luck where msg in (select msg from pw_luck w…

Java项目:就业管理系统设计和实现(java+springboot+ssm)
源码获取:博客首页 "资源" 里下载! 就业管理系统: 该毕业设计采用了spring boot,spring,spring mvc,mybatis作为后端技术框架,这些组合稳定抗打,前端使用了layui,界面美观…

算法设计与分析之循环与递归
前言:循环与递归可以说是算法设计中最基本但却也是最重要的工具方法。循环和递归对于学习过高级程序设计语言的人来说都并不陌生,但还是有必要仔细的探究一下循环和递归之间的相似和区别。循环与递归最大的相似之处莫不是在于他们在算法设计中的工具作用…

面向对象与软件工程---团队作业1
1.队伍名称: 遥遥万里(还有很长路要走的意思) 2.队员信息: 陈雄(组长) 学号:1700509024 博客园链接:https://www.cnblogs.com/bearchan/ 廖鹏辉 学号:1700802007 博客园…

从paxos到raft zab,为何raft能够“独领风骚”
文章目录RAFT出现的缘由RAFT 的实现STATE MACHINELog Replicated State MachineLeader Election基本角色关键变量基本选举过程Log Replicated基本概念基本操作SafetyLog Replication: Consistency checkLeader Election: Leader Completeness总结RAFT 和 ZAB 的对比参考文献:阅…

Java项目:前台+后台精品水果商城系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 前台用户的登录注册,水果商品的展示,水果的购物车, 购物车新增结算等等,银行卡的支付绑定,收货…
Android屏幕像素密度适配详解
讲到像素密度,我们先要搞明白什么是像素密度,像素密度的字面上的意思为手机屏幕上一定尺寸区域内像素的个数。在Android开发中, 我们一般会使用每英寸像素密度(dpi)这样一个单位来表示手机屏幕的像素密度,d…

如让自己想学不好shell编程都困难?
众所周知,shell是linux运维必备的技术,必须要掌握,但是shell语法复杂,灵活,网友掌握了语法也不知道如何应用到实际运维中,老男孩培训shell编程给所有linux运维人员带来了学好shell的法宝,老男孩培训2014最新…

sqlserver可将字符转成数字再进行sum,如果varchar类型中存放的都是数字
sqlserver语法: select sum(cast(score as int)) as score from 表名; 注意:int是整型,在实际操作中根据自己需要的类型转换。转载于:https://www.cnblogs.com/MisMe/p/10690748.html

LSM 优化系列(六)-- 【ATC‘20】MatrixKV : NVM 的PMEM 在 LSM-tree的write stall和写放大上的优化
文章目录LSM 问题背景MatrixKV 设计细节整体架构介绍Matrix Container介绍ReceiverRowTableCompactorSpace managementColumn Compaction介绍对于Column Compaction的总结读加速 Cross-row Hint SearchMatrixKv 写入完整流程MatrixKV 读取完整流程MatrixKV 性能总结这篇论文大家…

Java项目:前台+后台在线考试系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询…

修改nginx服务器类型
通常nginx服务器不隐藏服务器类型及版本信息 curl -I http://www.aaa.com 获取web服务器的类型和版本代码 HTTP/1.1 200 OK Server: nginx nginx/0.8.53 Date: Tue, 14 Dec 2010 08:10:06 GMT Content-Type: text/html Content-Length: 151 Last-Modified: Mon, 13 Dec 2…

JS 自带函数
JS数组方法汇总 array数组元素的添加和删除js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^var arr new Array();arr[0] "aaa";arr[1] "bbb";arr[2] "ccc";//alert(arr.leng…

Flink学习笔记:Operators之CoGroup及Join操作
本文为《Flink大数据项目实战》学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz 1. Window CoGroup与Join 1.1回顾RDBMS各种join 假设有两个表A和B 1.…

Rocksdb 的优秀代码(二)-- 工业级 打点系统 实现分享
文章目录前言数据结构选型打点代码设计耗时打点请求计数打点打点总结前言 一个完善的分布式系统一定是需要完善的打点统计,不论是对系统内核 还是 对系统使用者都是十分必要的。系统的客户需要直观得看到这个系统的性能相关的指标来决定是否使用以及如何最大化使用…

JVM中可生成的最大Thread数量
最近想测试下Openfire下的最大并发数,需要开大量线程来模拟客户端。对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单google了把,找到影响线程数量的因素有下面几个: -Xms intial java heap s…

Java项目:在线电影售票系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 前台: 1、正在上映的电影浏览查看。 2、影院信息浏览查看。 3、新闻咨询信息浏览查看。 4、地域信息查看切换。 5、用户注册登录。 6、电影排期查看。 7、在线选座生成…