基于javaweb+mysql的学生学科竞赛管理管理系统设计和实现(java+springboot+ssm)

基于javaweb+mysql的学生学科竞赛管理管理系统设计和实现(java+springboot+ssm)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

20220519002408

20220519002409

20220519002410

20220519002412

20220519002413

20220519002414

20220519002415

20220519002416

20220519002418

20220519002419

20220519002420

20220519002421

20220519002422

20220519002424

20220519002425

20220519002426

20220519002427

20220519002428

20220519002430

20220519002431

20220519002432

20220519002433

20220519002434

基于javaweb+springboot的学生学科竞赛管理管理系统设计和实现(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;

@Override

public 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() {

@Override

public boolean isFinished() {

return true;

@Override

public boolean isReady() {

return true;

@Override

public void setReadListener(ReadListener readListener) {

@Override

public int read() throws IOException {

return bis.read();

};

@Override

public String getParameter(String name) {

String value = super.getParameter(xssEncode(name));

if (StringUtils.isNotBlank(value)) {

value = xssEncode(value);

return value;

@Override

public 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;

@Override

public 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;

@Override

public 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 {

@Autowired

private SysUserService sysUserService;

@Autowired

private 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 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 {

@Autowired

private 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”)

@ResponseBody

public 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 {

@Autowired

private SysOssService sysOssService;

@Autowired

private 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();


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值