这个项目主要是为了解决大学生生活或者学习上的不便而研发的,主要是提供了一个平台供大学生在上面发布一些任务 比如快期末考试了找个人补习,出去游玩不够人想多找几个人出去,,,等等各种生活上或者学习上的事都可以借助我 们这个平台,在上面发布任务,其他人可以接受任务并获得一定的报酬。这样不仅能促进人际交往,解决个人的所需, 接受者还能获得一定的报酬。
项目结构和技术亮点:
#后台maven模块化 主要是基于ssm.
model:lombok简洁明了,只声明属性,不需声明getter,setter,构造等。。
dao:dao接口和mapper.xml
service:java8(lambda表达式,流)
common:发邮件功能包
api
#前台vue
vuex管理状态
vue-router路由
难点1:前后台完全分离
前台只负责静态数据 后台只提供数据 前后台之前约定一套统一的接口,通过合适的restful风格api和json数据进行交互
APIResult{
code 响应码
message 状态信息
result 数据
}
响应码:
SUCCESS(200),
ERROR(500),
NOTFOUND(404),
BADREQUEST(400),
UNLOGIN(414),
UNAUTHORITY(401);
难点2:redis作为缓存 spring+aspectJ基于配置
在配置文件中使用表达式来拦截service层中特定前缀的方法。在每次进入这些特定方法的时候就会先进入我们自定义的MethodCacheInterceptor:
先是查看了当前方法是否在我们自定义的方法中,如果不是的话就直接返回,不进入拦截器。
之后利用反射获取的类名、方法名、参数生成redis的key。
用key在redis中查询是否已经有缓存。
有缓存就直接返回缓存内容,不再继续查询数据库。
如果没有缓存就查询数据库并将返回信息加入到redis中。
难点3:websocket
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信—可以通俗的解释为服务器主动发送信息给客户端。
在本系统中主要有消息通知和在线聊天两个功能。
1)消息通知、在线聊天 客户端和浏览器之间是基于tcp传输消息的,而建立tcp连接是通过三次握手实现的。在客户端向服务端发送消息的时候,通过在握手前获取当前用户的身份 ,将用户的信息绑定到socket上,然后当建立连接的时候将用户id作为key,session作为value存放在一个静态的map中,有了这个map就能通过session发送 消息的api来向用户发送消息。
难点4:权限设计
系统角色主要包括普通用户,后台管理员,黑名单。在数据表中用权限字段来记录用户的权限。由于这是一个前后台分离的项目,所以用户每一次访问后台接口 时都需要判定用户是否有权限访问,如果在每个接口中都去做权限判断那将会产生很多重复代码,所以本项目就采用了servlet的过滤器,通过在过滤器中获取 前台发过来的id,在session中找是否有该用户,如果连session中都没有,那就是没有登录,如果有的则去获取用户的权限并把权限放在本地线程中。然后在需 要权限的接口中,通过本地线程可以直接获取本次访问的权限,从而给客户端返回相应的状态码和结果。
#shiro验证登录
doGetAuthenticationInfo是用于登录验证的,在登录的时候需要将数据封装到Shiro的一个token中,执行shiro的login()方法,之后只要我们将MyRealm这个类配置到Spring中, 登录的时候Shiro就会自动的调用doGetAuthenticationInfo()方法进行验证。
验证逻辑: 先根据用户名查询用户,如果查询到的话再将查询到的用户名和密码放到SimpleAuthenticationInfo对象中,Shiro会自动根据用户输入的密码和查询到的密码进行匹配,如果匹配不上就会抛出异常, 匹配上之后就会执行doGetAuthorizationInfo()进行相应的权限验证。
难点5:日志spring+aspectJ基于注解(通过AspectJ@annotation表达式拦截方法)
难点6:邮件
1)消息通知
给用户发送一些的重要的通知
2)密码认证
系统会先让用户填写自己的邮箱和新密码,系统接收到新密码后先将邮箱的hash为key,将密码保存在一个静态map中,map中的value会记录保存的时间,然后通过一个定时线程来检测这个map,将其中过期的数据清除,这样用户必须在系统指定的时间内来完整链接的验证。当用户点击链接后,系统会通过链接传回来的hash来与map中的数据对比,若对比成功,则将系统中该邮箱下的密码更新。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。