基于springboot+vue的论坛系统(前后端分离)

博主主页猫头鹰源码

博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

文末联系获取

项目介绍: 

本系统适合选题:论坛、信息交流、论坛交流等。系统采用springboot+vue整合开发,前端框架主要使用了element-ui、layui框架、数据层采用mybatis,功能齐全,界面美观。

功能介绍:

管理员

管理员管理论坛,主要是对论坛帖子增删改查以及对论坛帖子回复进行查看,对版主和用户进行管理,管理新闻等。对管理员的功能进行分析之后,将使用图3.4的管理员用例图来描述管理员的功能。

版主

版主可以发布帖子,可以查询论坛帖子,可以对论坛帖子回复进行查看,可以回复帖子,可以删除帖子,可以查看新闻,更改个人信息等。对版主的功能进行分析之后,将使用图3.5的版主用例图来描述版主的功能。

用户

用户在前台查看新闻,在留言版对发布的留言和管理员的回复进行查看,在论坛模块发帖,评论帖子,查看帖子。对用户的功能进行分析之后,将使用图3.6的用户用例图来描述用户的功能。

系统包含技术:

后端:springboot,mybatis
前端:element-ui、layui、js、css等
开发工具:idea/vscode
数据库:mysql 5.7
JDK版本:jdk1.8

部分截图说明:

下面是首页

新闻信息

帖子

留言查看

 登录

用户管理

新闻管理

版主管理

论坛管理

部分代码:

@RequestMapping("/location") 	public R location(String lng,String lat) { 		if(BAIDU_DITU_AK==null) { 			BAIDU_DITU_AK = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "baidu_ditu_ak")).getValue(); 			if(BAIDU_DITU_AK==null) { 				return R.error("请在配置管理中正确配置baidu_ditu_ak"); 			} 		} 		Map<String, String> map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat); 		return R.ok().put("data", map); 	} 	 	/** 	 * 人脸比对 	 *  	 * @param face1 人脸1 	 * @param face2 人脸2 	 * @return 	 */ 	@RequestMapping("/matchFace") 	public R matchFace(String face1, String face2, HttpServletRequest request) { 		if(client==null) { 			/*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/ 			String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue(); 			String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue(); 			String token = BaiduUtil.getAuth(APIKey, SecretKey); 			if(token==null) { 				return R.error("请在配置管理中正确配置APIKey和SecretKey"); 			} 			client = new AipFace(null, APIKey, SecretKey); 			client.setConnectionTimeoutInMillis(2000); 			client.setSocketTimeoutInMillis(60000); 		} 		JSONObject res = null; 		try { 			File file1 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face1); 			File file2 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face2); 			String img1 = Base64Util.encode(FileUtil.FileToByte(file1)); 			String img2 = Base64Util.encode(FileUtil.FileToByte(file2)); 			MatchRequest req1 = new MatchRequest(img1, "BASE64"); 			MatchRequest req2 = new MatchRequest(img2, "BASE64"); 			ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>(); 			requests.add(req1); 			requests.add(req2); 			res = client.match(requests); 			System.out.println(res.get("result")); 		} catch (FileNotFoundException e) { 			e.printStackTrace(); 			return R.error("文件不存在"); 		} catch (IOException e) { 			e.printStackTrace(); 		}  		return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString())); 	}      	/** 	 * 获取table表中的column列表(联动接口) 	 * @return 	 */ 	@RequestMapping("/option/{tableName}/{columnName}") 	@IgnoreAuth 	public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) { 		Map<String, Object> params = new HashMap<String, Object>(); 		params.put("table", tableName); 		params.put("column", columnName); 		if(StringUtils.isNotBlank(level)) { 			params.put("level", level); 		} 		if(StringUtils.isNotBlank(parent)) { 			params.put("parent", parent); 		} 		List<String> data = commonService.getOption(params); 		return R.ok().put("data", data); 	} 	 	/** 	 * 根据table中的column获取单条记录 	 * @return 	 */ 	@RequestMapping("/follow/{tableName}/{columnName}") 	@IgnoreAuth 	public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) { 		Map<String, Object> params = new HashMap<String, Object>(); 		params.put("table", tableName); 		params.put("column", columnName); 		params.put("columnValue", columnValue); 		Map<String, Object> result = commonService.getFollowByOption(params); 		return R.ok().put("data", result); 	} 	 	/** 	 * 修改table表的sfsh状态 	 * @param map 	 * @return 	 */ 	@RequestMapping("/sh/{tableName}") 	public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) { 		map.put("table", tableName); 		commonService.sh(map); 		return R.ok(); 	} 	 	/** 	 * 获取需要提醒的记录数 	 * @param tableName 	 * @param columnName 	 * @param type 1:数字 2:日期 	 * @param map 	 * @return 	 */ 	@RequestMapping("/remind/{tableName}/{columnName}/{type}") 	@IgnoreAuth 	public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,  						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) { 		map.put("table", tableName); 		map.put("column", columnName); 		map.put("type", type); 		 		if(type.equals("2")) { 			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 			Calendar c = Calendar.getInstance(); 			Date remindStartDate = null; 			Date remindEndDate = null; 			if(map.get("remindstart")!=null) { 				Integer remindStart = Integer.parseInt(map.get("remindstart").toString()); 				c.setTime(new Date());  				c.add(Calendar.DAY_OF_MONTH,remindStart); 				remindStartDate = c.getTime(); 				map.put("remindstart", sdf.format(remindStartDate)); 			} 			if(map.get("remindend")!=null) { 				Integer remindEnd = Integer.parseInt(map.get("remindend").toString()); 				c.setTime(new Date()); 				c.add(Calendar.DAY_OF_MONTH,remindEnd); 				remindEndDate = c.getTime(); 				map.put("remindend", sdf.format(remindEndDate)); 			} 		} 		 		int count = commonService.remindCount(map); 		return R.ok().put("count", count); 	} 

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
权限管理系统是一种用于管理用户权限和角色的系统,可以根据用户的身份和角色来控制其访问系统中的各种资源。基于SpringBootVue和Redis的前后端分离模式,可以更好地实现权限管理系统的功能。 在这个系统中,SpringBoot作为后端框架,提供了强大的功能和稳定的性能,可以处理用户的请求并进行权限验证。Vue作为前端框架,提供了友好的界面和良好的用户体验,可以让用户方便地进行权限管理操作。而Redis作为缓存数据库,可以用来存储权限信息和用户的登录状态,加快系统的响应速度和提高系统的性能。 在权限管理系统中,我们可以使用RBAC(基于角色的权限控制)模型,将用户分配到不同的角色,再将角色分配到不同的权限,从而实现对用户访问资源的控制。通过这种方式,可以实现灵活的权限管理,并且可以根据实际需求动态地调整用户的权限和角色。 通过使用SpringBootVue,我们可以实现前后端分离,让前端和后端分别进行开发和维护,降低了系统的耦合度,同时也增加了系统的灵活性和可维护性。而通过使用Redis,我们可以充分利用其高速的读取和写入能力,有效地提升系统的性能和响应速度。 综上所述,基于SpringBootVue和Redis的权限管理系统,可以实现灵活、高效和安全的权限管理功能,满足用户对于权限管理的各种需求。同时,前后端分离模式也使得系统更加灵活和易于维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值