1 Star 4 Fork 0

郑鳕 / 尚筹网

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

尚筹网

介绍

①从单一架构到分布式架构的过渡阶段,适合学完Ssm框架后,需要通过项目巩固所学知识技能,并平滑过渡到分布式开发的小伙伴

②前端会员系统是基于SpringBoot+SpringCloud的微服务架构,使用了SpringCloud的Eureka、Ribbon、Feign、Zuul等基本组件搭建了基础开发环境

③后台管理系统是基于Ssm整合的单一架构,使用SpringSecurity进行权限控制、使用zTree实现树形结构数据在页面的显示,并通过MyBatis的PageHelper插件实现分页

项目作用

帮助创业者发布创业项目,向大众募集启动资金的融资平台

业务功能

系统前台(前台会员系统) 系统后台(后台管理员系统)
众筹项目展示(列表) 角色数据维护
众筹项目细节展示(详细) 菜单数据维护
支持项目(付款) 权限控制
个人中心-我的众筹-发起众筹 业务审核

软件架构

尚筹网项目系统架构图

技术点

后台管理系统用到的技术:

  1. Spring
  2. SpringMVC
  3. Mybatis
  4. Mybatis Generator----(Mybatis代码生成器)
  5. PageHelper-----------(Mybatis分页插件)
  6. slf4j + logback------(日志系统)
  7. SpringSecurity-------(安全框架)
  8. SpringSession--------(JDBC会话管理)

前台会员系统用到的技术:

  1. SpringBoot-----(开发具体微服务,使用“场景启动器[starter]”快速整合第三方中间件)
  2. SpringMVC
  3. Mybatis
  4. Redis--------------------------(缓存数据库)
  5. SpringSession------------------(Redis会话管理)
  6. Thymeleaf----------------------(模板引擎)
  7. SpringCloud--------------------(提供的微服务架构整体管理的一站式解决方案)
  8. SpringCloud:Eureka------------(注册中心)
  9. SpringCloud:Ribbon------------(客户端负载均衡)
  10. SpringCloud:Feign-------------(声明式远程方法调用)
  11. SpringCloud:Hystrix-----------(服务降级、熔断、监控)
  12. SpringCloud:Zuul-------------(网关)

第三方接口:

  1. 发送短信验证码
  2. 蚂蚁金服的支付宝支付
  3. 阿里云OSS对象存储服务

学习笔记

  1. SpringSecurity

AffirmativeBased 继承了 AbstractAccessDecisionManager ,所以 AffirmativeBased 是SpringSecurity框架中默认的访问决策管理器

AffirmativeBased 里面有3个 AccessDecisionVoter (访问决策投票者),按照顺序分别为 PreInvocationAuthorizationAdviceVoter(使用 @PreFilter 和 @PreAuthorize 注解处理权限的投票者)、RoleVoter(角色投票者)、AuthenticatedVoter(认证投票者)

AffirmativeBased 按照顺序依次对各个投票者的返回值进行判断

1)如果遇到的投票者的返回值是1,直接允许访问,不再对其他投票者的返回值进行判断了;

2)如果遇到的投票者的返回值是-1,继续对其他投票者的返回值进行判断了。如果一直没有遇到返回值是1的投票者,则不允许访问,抛出访问被拒绝的异常;如果中途遇到了返回值是1的投票者,则直接允许访问,不再对其他投票者的返回值进行判断了;

3)如果遇到的投票者的返回值不是1也不是-1,则继续对其他投票者的返回值进行判断了,如果一直没有遇到返回值是1或-1的投票者,代表所有投票者都弃权了,这个时候是否允许访问,要看该访问决策管理器里的allowIfAllAbstainDecisions属性是什么值,默认的值是false,表示不允许访问。这个属性值也可以由用户自己设置。

WebExpressionVoter(表达式投票者)

输入图片说明

输入图片说明

  1. SpringSession

为了SpringSecurity整合SpringSession,加入了SpringSession的xml配置文件,也在web.xml中加入了它的监听器,可是在SpringSecurity的配置类中却怎么也引用不到SessionRegistry,最后在百度得知,必须先初始化SpringSession,后初始化SpringSecurity。最终的解决办法是注释掉web.xml中的SpringSession的监听器,然后加一个初始化类,只需继承AbstractHttpSessionApplicationInitializer这个类即可,这样就会保证SpringSession先初始化。

使用SpringSession的xml配置文件,在里面配置JdbcHttpSessionConfiguration,及使用JDBC的方式管理Session,然后在源码中找到Mysql数据库的建表语句,创建出需要的表即可。

使用SpringSession还需要注意它的序列化和反序列化,存入数据库表中的时候,它会使用对象的序列化,所以存入的对象实体类需要实现序列化接口,从数据库表中获取Session属性值的时候需要用到对象的反序列化。所以,更新和获取Session数据时,只需模仿它的源码中的序列化和反序列化方法即可。我的是在SessionServiceImpl中加入的序列化和反序列化方法,也是在它的源码中复制过来的。

未解决的问题

  1. 【待优化】给角色分配权限时,没有在全部在线用户集合里查找拥有该角色的用户进行更新权限,而是直接更新了全部在线用户,图省事了,没有考虑到如果在线用户量过大,会造成影响。不只这一个功能,还有很多类似的功能,例如给用户分配角色,修改角色等等,都是这类问题没有优化。
  2. 【待优化】删除操作,没有把关联表中的数据一并删除。这个问题,大家都懂,我懒得改了。
  3. 【待优化】菜单、权限等没有排序号字段,没有实现按照规定的顺序排列。

特别说明

  1. 后台管理系统中使用SpringSecurity进行权限控制,为了不在Controller的方法上使用注解这种硬编码的方式控制权限,所以通过查看源码进行改进,实现了动态权限控制。不仅能控制url,还能控制页面上的操作按钮是否显示,即添加、修改和删除等操作按钮都可在后台管理系统中进行权限控制。
  2. 为了分配权限时能够实时的修改在线用户的权限等信息,又增加了SpringSession对会话进行管理,使用的是JDBC的方式将在线用户的Session对象存入数据库表中,修改权限时,修改在线用户Session表中的记录即可。这样就解决了用户权限改变后,不用让用户再重新登录才能显示出更新后的权限了。
  3. 前台会员系统的功能没有进行完整开发,只做了主要的功能,比如首页项目分类、项目详情、下单、支付。至于其他的功能并没有实现。
  4. 支付宝支付功能需要使用真实的外网环境,开发时可以使用内网穿透,建议使用natapp。

空文件

简介

尚硅谷入门项目。从单一架构到分布式架构的过渡阶段,适合学完Ssm框架后,需要通过项目巩固所学知识技能,并平滑过渡到分布式开发的小伙伴 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/zhengxue/crowdfunding.git
git@gitee.com:zhengxue/crowdfunding.git
zhengxue
crowdfunding
尚筹网
master

搜索帮助