1 Star 0 Fork 0

宁浩 / csc-final

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

csc-final 大学生社区

这个项目主要是为了解决大学生生活或者学习上的不便而研发的,主要是提供了一个平台供大学生在上面发布一些任务 比如快期末考试了找个人补习,出去游玩不够人想多找几个人出去,,,等等各种生活上或者学习上的事都可以借助我 们这个平台,在上面发布任务,其他人可以接受任务并获得一定的报酬。这样不仅能促进人际交往,解决个人的所需, 接受者还能获得一定的报酬。

项目结构和技术亮点:

#后台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中的数据对比,若对比成功,则将系统中该邮箱下的密码更新。

空文件

简介

vue+redis+shiro+ssm+maven 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/nathanxyz/csc-final.git
git@gitee.com:nathanxyz/csc-final.git
nathanxyz
csc-final
csc-final
master

搜索帮助