SpringBoot开源项目Jeeplatform
JEEPlatform
一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化)、SCM(供应链系统)、ERP(企业资源管理系统)、CMS(内容管理系统)、CRM(客户关系管理系统)等企业系统的通用业务功能。Github链接:https://github.com/u014427391/jeeplatform
欢迎下载或者star(收藏)
JeePlatform项目是一款以Activiti为工作流引擎,以Spring Framework为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台,基于本平台可以实现快速开发,实现企业信息管理的高效、高性能开发。系统追求安全、性能方面的有效实现。项目还在开发中。。。
系统设计
系统管理(模块名称jeeplatform-admin)
管理系统登录页面,采用Shiro登录验证

管理系统主页前端,可以适配移动端页面

管理系统主页采用开源前端模板,具有换肤功能


管理系统主页,获取用户具有的权限,显示菜单

角色进行授权,只有超级管理员才具有权限

角色进行配置,可以学习一下RBAC(基于角色的权限控制)

使用JavaEmail插件实现邮件发送,记得需要开启SSl验证

OA管理系统(待开发)
CMS管理系统(待开发)
系统升级
单点登录基础(模块名称jeeplatform-sso)(开发中)
项目采用CAS登录登录实现,单点登录集群搭建可以参考博客:
http://blog.csdn.net/u014427391/article/details/78653482
项目单点登录:使用nginx作为负载均衡,使用redis存储tomcat session,来实现集群中tomcat session的共享,使用redis作为cas ticket的仓库,来实现集群中cas ticket的一致性。
单点登录集群如图

SpringBoot集成Redis缓存处理(Spring AOP实现)
先从Redis里获取缓存,查询不到,就查询MySQL数据库,然后再保存到Redis缓存里,下次查询时直接调用Redis缓存
package org.muses.jeeplatform.cache;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
/**
* AOP实现Redis缓存处理
*/
@Component
@Aspect
public class RedisAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(RedisAspect.class);
@Autowired
@Qualifier("redisCache")
private RedisCache redisCache;
/**
* 拦截所有元注解RedisCache注解的方法
*/
@Pointcut("@annotation(org.muses.jeeplatform.annotation.RedisCache)")
public void pointcutMethod(){
}
/**
* 环绕处理,先从Redis里获取缓存,查询不到,就查询MySQL数据库,
* 然后再保存到Redis缓存里
* @param joinPoint
* @return
*/
@Around("pointcutMethod()")
public Object around(ProceedingJoinPoint joinPoint){
//前置:从Redis里获取缓存
//先获取目标方法参数
long startTime = System.currentTimeMillis();
String applId = null;
Object[] args = joinPoint.getArgs();
if (args != null && args.length > 0) {
applId = String.valueOf(args[0]);
}
//获取目标方法所在类
String target = joinPoint.getTarget().toString();
String className = target.split("@")[0];
//获取目标方法的方法名称
String methodName = joinPoint.getSignature().getName();
//redis中key格式: applId:方法名称
String redisKey = applId + ":" + className + "." + methodName;
Object obj = redisCache.getDataFromRedis(redisKey);
if(obj!=null){
LOGGER.info("**********从Redis中查到了数据**********");
LOGGER.info("Redis的KEY值:"+redisKey);
LOGGER.info("REDIS的VALUE值:"+obj.toString());
return obj;
}
long endTime = System.currentTimeMillis();
LOGGER.info("Redis缓存AOP处理所用时间:"+(endTime-startTime));
LOGGER.info("**********没有从Redis查到数据**********");
try{
obj = joinPoint.proceed();
}catch(Throwable e){
e.printStackTrace();
}
LOGGER.info("**********开始从MySQL查询数据**********");
//后置:将数据库查到的数据保存到Redis
String code = redisCache.saveDataToRedis(redisKey,obj);
if(code.equals("OK")){
LOGGER.info("**********数据成功保存到Redis缓存!!!**********");
LOGGER.info("Redis的KEY值:"+redisKey);
LOGGER.info("REDIS的VALUE值:"+obj.toString());
}
return obj;
}
}
可以看到Redis里保存到了缓存
业务方案
系统管理通用功能
- 用户管理: 系统用户 OK
- 角色管理: 按照企业系统职能进行角色分配,每个角色具有不同的系统操作权限 OK
- 权限管理: 权限管理细分到系统按钮权限,菜单权限,管理员可以对权限进行细分控制
- 在线管理:管理在线用户,可以强制下线
- 菜单管理:系统可以配置系统菜单,并分配不同的权限 OK
- 报表统计:数据报表、用户分析
- 系统监控:数据监控、系统日志(用户登录记录)
- 通用接口:SMS(短信)、系统邮件、Excel表导出导入操作...
OA系统通用功能(待开发)
- 考勤管理:请假流程
- 人事管理:机构管理、部门管理、员工管理
CMS系统通用功能(待开发)
- 信息管理:文章管理、文章审核
...
技术方案
后台技术
- 工作流引擎:Activiti5
- ORM框架:Mybatis/Hibernate JPA
- Web框架:SpringMVC
- 核心框架:Spring Framework4.0
- 任务调度:Spring Task
- 权限安全:Apache Shiro/Spring Security
- 全文搜索引擎:Lucene/Solr
- 页面静态化处理:Freemark/Velocity
- 服务器页面包含技术:SSI
- 网页即时通讯:long polling/websocket
- 连接池:Druid(阿里开源)
- 日志处理:SLF4J
- 缓存处理:Redis、EhCache
- Excel表处理:POI
前端技术
- 文件上传:JQuery uploadify
- 树形结构:EasyUI Tree
- 日期插件:JQuery Date
- 弹窗框架:zDialog
- Cookie保存:JQuery Cookie
- 富文本编辑器:Baidu UEDitor
- 前端框架:Twitter Bootstrap、ExtJS
服务器
- 负载均衡:Nginx
- 分布式:alibaba Dubbo
- 中间件:RocketMQ
项目测试
- DeBug:Junit、FindBugs、EclEmma
- 程序质量:Jdepend4eclipse
- 压力测试:JMeter
工具软件
- 服务器:SecureCRT
- Java:IntelliJ IDEA/Eclipse
- 远程控制:TeamViewer
- 版本控制:Git
- Jar管理:Maven
- UML建模:ArgoUML
- Eclipse测试插件:EclEmma
- 程序质量检查插件:Jdepend4eclipse(Eclipse平台)
Github链接:https://github.com/u014427391/jeeplatform
欢迎下载或者star(收藏)
SpringBoot开源项目Jeeplatform的更多相关文章
- Github 上 10 个值得学习的 Springboot 开源项目
Spring Boot 几乎继承了所有 Spring 框架的优点,同时还可以让项目的配置更简化.编码更简化.部署更方便.近两年受到很多开发者的追捧,也是火热的不行! 下面给大家整理了 10 个 Git ...
- SpringBoot开源项目(企业信息化基础平台)
JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关 ...
- SpringBoot开源项目学习总结
一.实现日期格式数据类型的转换 首先,定义DateConverter实现Converter<String, Date>接口: package com.stevlu.common; impo ...
- 开源项目推荐:e-example / Springboot+bootstrap + ……
前言: 我想要找一个 springboot + bootstrap 的例子介绍,然后搜索到了这个开源项目. 所有能跑起来的项目都有研究价值,看看这个项目的文档.目前正好满足我想要的功能.推荐 正文: ...
- 精选SpringBoot八大开源项目:支付、秒杀、全文搜索等
前言 曾在自己的博客中写下这样一段话:有一种力量无人能抵挡,它永不言败生来倔强.有一种理想照亮了迷茫,在那写满荣耀的地方. 如今,虽然没有大理想抱负,但是却有自己的小计划.下面是这一年来,自己利用闲暇 ...
- springboot的一些开源项目
原文标题:精选SpringBoot八大开源项目:支付.秒杀.全文搜索等 支付项目: 项目地址:https://gitee.com/52itstyle/spring-boot-pay 秒杀案例: 项目地 ...
- 【Spring Cloud & Alibaba全栈开源项目实战】:SpringBoot整合ELK实现分布式登录日志收集和统计
一. 前言 其实早前就想计划出这篇文章,但是最近主要精力在完善微服务.系统权限设计.微信小程序和管理前端的功能,不过好在有群里小伙伴的一起帮忙反馈问题,基础版的功能已经差不多,也在此谢过,希望今后大家 ...
- [开源项目]可观测、易使用的SpringBoot线程池
在开发spring boot应用服务的时候,难免会使用到异步任务及线程池.spring boot的线程池是可以自定义的,所以我们经常会在项目里面看到类似于下面这样的代码 @Bean public Ex ...
- 热门开源项目:Guns-后台管理系统
Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时 ...
随机推荐
- 分析easyswoole3.0源码,服务启动为例(二)
以下内容需要结合es的源码,不然可能会觉得跳跃.先描述下es启动的大致流程.es启动的时候注册异常处理函数以及加载配置文件.根据位置文件的设置选择启动哪种swoole服务.然后用一个事件注册类,注册s ...
- wsl
1.win10设置为开发人员模式,并安装subsystem for linux(命令行输入bash就可以安装) 2.登录并su到root,然后修改/etc/sudoers,在最后一行加(一定要在最后一 ...
- 解决打开txt文件默认不是NotePad++问题
http://blog.sina.com.cn/s/blog_7414a3c80102wkci.html
- win10jdk环境变量配置问题:'javac' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
在编译时报错:'javac' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 原因1:配置Path的时候使用%JAVA_HOME%相对路径配置. 解决:把Path路径改为绝对路径(例:D:\P ...
- Atom使用
cmd-r 通过方法名查找 ctrl-option-g 跳转至光标所在方法或结构 安装 last-cursor-position 后 alt-- 返回至光标上一次所在位置
- RequestMethod.Post&RequestMethod.GET
1.GET和POST都是将数据送到服务器 2.GET通过URL请求传递用户的数据,将表单各字段名称以及内容,以成对的字符串连接,置于action所指程序的URL后:POST方法通过HTTP post ...
- A能ping通B,BpingA请求超时
除了防火墙等,杀毒软件都已经关了: A是外网,B是内网,A有两个ip地址,请ping A 的内网地址.
- 渗透测试的理论部分4——开放式Web应用程序安全项目
开放式Web应用程序安全项目(Open Web Application Security Project OWASP) 定期退出Top 10 project(排名前十的安全隐患防守规则) 公开了编写安 ...
- Python开发——9.面向对象编程
一.面向对象设计(Object oriented design) 面向对象设计是将一类具体事物的数据和动作整合到一起的过程,不会要求面向对象语言编程,但如果想要构造具备对象性质和特点的数据类型,需要更 ...
- JSON.parse()——Uncaught SyntaxError: Unexpected token \ in JSON at position 1
背景:项目安全处理方面之一 ——对特殊字符进行编解码(后端编码,前端解码) 特殊字符: " %22 \ %5C / %2F & %26 % %25 ' ...