Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
smileNicky
jeeplatform
提交
4d541eba
J
jeeplatform
项目概览
smileNicky
/
jeeplatform
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
5
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jeeplatform
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
5
Issue
5
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4d541eba
编写于
5月 12, 2020
作者:
马
马增群
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master' into 1.1.0
上级
7813a4bf
0c57837e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
159 deletion
+36
-159
README.md
README.md
+36
-159
未找到文件。
README.md
浏览文件 @
4d541eba
...
...
@@ -5,7 +5,7 @@ JeePlatform项目是一款以Spring Framework为核心框架,集ORM框架Mybat
## 二、系统设计
### 系统管理(模块名称jeeplatform-admin)
管理系统登录页面
,采用Shiro登录验证
管理系统登录页面
ps:登录链接一般为:http://127.0.0.1:8080/jeeplatform/login
![
Image text
](
https://github.com/u014427391/jeeplatform/raw/master/screenshot/管理系统登录页面.png
)
...
...
@@ -30,113 +30,33 @@ ps:登录链接一般为:http://127.0.0.1:8080/jeeplatform/login
![
Image text
](
https://github.com/u014427391/jeeplatform/raw/master/screenshot/发送邮件.png
)
### OA管理系统(待开发)
接入CAS Server实现单点登录
### CMS管理系统(待开发)
暂时接入Oauth2.0实现的单点登录系统
## 三、关键技术
###
单点登录基础(模块名称jeeplatform-sso)(开发
中)
> 项目采用CAS
登录登录实现
,单点登录集群搭建可以参考博客:
###
CAS单点登录基础(模块名称jeeplatform-sso-cas)(功能修整
中)
> 项目采用CAS
实现单点登录
,单点登录集群搭建可以参考博客:
> http://blog.csdn.net/u014427391/article/details/78653482
> 项目单点登录:使用nginx作为负载均衡,使用redis存储tomcat session,来实现集群中tomcat session的共享,使用redis作为cas ticket的仓库,来实现集群中cas ticket的一致性。
> 项目单点登录:使用nginx作为负载均衡,使用redis存储tomcat session,来实现集群中tomcat session的共享,使用redis作为cas ticket的仓库,来实现集群中cas ticket的一致性。OA已经对接CAS,admin工程暂时不对接CAS
图来自官网,这里简单介绍一下,从图可以看出,CAS支持多种方式的认证,一种是LDAP的、比较常见的数据库Database的JDBC,还有Active Directory等等;支持的协议有Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、 SAML2.0 等
![
这里写图片描述
](
https://img-blog.csdn.net/20180902172712501?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ0MjczOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
)
单点登录集群如图
![
这里写图片描述
](
https://img-blog.csdn.net/20180826231806797?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ0MjczOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
)
单点登录集群方案如图
![
Image text
](
https://github.com/u014427391/jeeplatform/raw/master/screenshot/单点登录集群.png
)
### OAuth2.0单点登录基础(模块名称jeeplatform-sso-oauth2)(功能修整中)
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200511144921931.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ0MjczOTE=,size_16,color_FFFFFF,t_70
)
### 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里获取缓存,查询不到,就查询MySQL数据库,然后再保存到Redis缓存里,下次查询时直接调用Redis缓存,详情参考博客:
[
链接
](
https://blog.csdn.net/u014427391/article/details/78799623
)
![
这里写图片描述
](
http://img.blog.csdn.net/20171214104250995?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDQyNzM5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
)
可以看到Redis里保存到了缓存
...
...
@@ -145,6 +65,7 @@ public class RedisAspect {
## 四、业务方案
### 系统管理通用功能
-
[ ] 单点登录: OAuth2.0+JWT单点登录/CAS单点登录
-
[x] 用户管理: 系统用户
-
[x] 角色管理: 按照企业系统职能进行角色分配,每个角色具有不同的系统操作权限
-
[x] 权限管理: 权限管理细分到系统菜单权限
...
...
@@ -155,10 +76,12 @@ public class RedisAspect {
-
[x] 在线文档:SwaggerUI API在线文档管理
-
[x] 通用接口:系统邮件发送功能、Excel报表功能
### OA系统通用功能(待开发)
-
[x] 单点登录: CAS单点登录
-
[ ] 考勤管理:请假流程
-
[ ] 人事管理:机构管理、部门管理、员工管理
### CMS系统通用功能(待开发)
-
[x] 单点登录: OAuth2.0+JWT单点登录
-
[ ] 信息管理:文章管理、文章审核
...
...
...
@@ -167,10 +90,10 @@ public class RedisAspect {
*
工作流引擎:Activiti5(待定)
*
ORM框架:Mybatis
*
Web框架:SpringMVC
*
核心框架:Spring
Framework4.0
*
核心框架:Spring
Boot
*
任务调度:Spring Task(待定)
*
权限安全:Apache Shiro
*
全文搜索引擎:Lucene
*
权限安全:Apache Shiro
、Spring Security
*
全文搜索引擎:Lucene
(待定)
*
模板引擎:JSP(还没使用Thymeleaf,前端需要重构)
*
服务器页面包含技术:SSI(待定)
*
网页即时通讯:websocket
...
...
@@ -186,40 +109,21 @@ public class RedisAspect {
*
弹窗框架:zDialog
*
Cookie保存:JQuery Cookie
*
富文本编辑器:Baidu UEDitor
*
前端框架:Twitter Bootstrap、ExtJS
### 服务器
*
负载均衡:Nginx
*
分布式:alibaba Dubbo
*
中间件:RocketMQ(待定)
### 项目测试
*
DeBug:Junit、FindBugs、EclEmma
*
程序质量:Jdepend4eclipse
*
压力测试:JMeter(待定)
### 工具软件
*
服务器:SecureCRT
*
Java:IntelliJ IDEA
*
远程控制:TeamViewer
*
版本控制:Git、smartgit
*
Jar管理:Maven
*
UML建模:ArgoUML
*
Eclipse测试插件:EclEmma
*
程序质量检查插件:Jdepend4eclipse(Eclipse平台)
*
前端框架:Twitter Bootstrap
## 六、常见问题
运行jeeplatform打开页面404,如果是用idea的,就可以edit configurations->configuration->edit working directory设置为:$MODULE_DIR$
## 七、版本说明
*
master版本
主干版本,代码经过测试,可以正常运行,这个版本还没集成全部CAS单点代码,因为CAS单点服务端代码基本调试成功,而客户端
对接出现bug
,所以并没有merge代码
主干版本,代码经过测试,可以正常运行,这个版本还没集成全部CAS单点代码,因为CAS单点服务端代码基本调试成功,而客户端
还没实现跨越
,所以并没有merge代码
*
dev版本
dev版本代码和master分支基本一致
*
1.0.0版本
进行CAS单点登录实验的版本,CAS集成有遇到问题,还没合并代码到dev和master
基础版,基本实现简单的权限管理,功能还需改善,权限控制还需要进行细粒度控制
*
1.
0.1
版本
进行
Dubbo微服务实验的版本,代码还没合并到dev和master
*
1.
1.0
版本
进行
单点登录对接实验的版本,拟采用两种方案,CAS实现的单点登录和OAuth2.0+JWT单点登录,admin工程暂时还没对接,oa工程对接CAS,cms工程对接OAuth2.0
## 八、项目技术博客介绍
为了帮助学习者更好地理解代码,下面给出自己写的一些博客链接
...
...
@@ -241,44 +145,17 @@ dev版本代码和master分支基本一致
### RPC框架
*
[
Dubbo服务注册与发现
](
https://smilenicky.blog.csdn.net/article/details/96754952
)
### Redis知识
*
[
Redis学习笔记之基本数据结构
](
https://blog.csdn.net/u014427391/article/details/82860694
)
*
[
Redis学习笔记之位图
](
https://blog.csdn.net/u014427391/article/details/87923407
)
*
[
Redis学习笔记之延时队列
](
https://blog.csdn.net/u014427391/article/details/87905450
)
*
[
Redis HyperLogLog用法简介
](
https://smilenicky.blog.csdn.net/article/details/95992173
)
*
[
Redis学习笔记之分布式锁
](
https://blog.csdn.net/u014427391/article/details/84934045
)
### Oracle知识
*
[
Oracle知识整理笔录
](
https://blog.csdn.net/u014427391/article/details/82317376
)
*
[
Oracle笔记之锁表和解锁
](
https://blog.csdn.net/u014427391/article/details/83046148
)
*
[
select in超过1000条报错解决方法
](
https://blog.csdn.net/u014427391/article/details/87922878
)
*
[
Oracle笔记之修改表字段类型
](
https://blog.csdn.net/u014427391/article/details/83046006
)
*
[
Oracle merge合并更新函数
](
https://blog.csdn.net/u014427391/article/details/87898729
)
### MySQL知识
*
[
MySQL逻辑架构简介
](
https://smilenicky.blog.csdn.net/article/details/100170265
)
### 单点登录
*
[
单点登录集群安装教程
](
http://blog.csdn.net/u014427391/article/details/78653482
)
*
[
CAS单点登录系列之原理简单介绍
](
https://blog.csdn.net/u014427391/article/details/82083995
)
*
[
CAS单点登录系列之服务端部署
](
https://blog.csdn.net/u014427391/article/details/91345307
)
*
[
CAS单点登录系列之支持数据库认证
](
https://blog.csdn.net/u014427391/article/details/91345240
)
*
[
CAS系列之使用cas overlay搭建服务端(一)
](
https://blog.csdn.net/u014427391/article/details/105818468
)
*
[
CAS 5.3.1系列之支持JDBC认证登录(二)
](
https://blog.csdn.net/u014427391/article/details/105603895
)
*
[
CAS 5.3.1系列之自定义JDBC认证策略(三)
](
https://blog.csdn.net/u014427391/article/details/105820486
)
*
[
CAS 5.3.1系列之自定义Shiro认证策略(四)
](
https://blog.csdn.net/u014427391/article/details/105820586
)
### Docker笔记
*
[
Docker简介和安装教程
](
https://smilenicky.blog.csdn.net/article/details/97613891
)
### SQL调优知识
*
Oracle
*
[
Oracle优化器基础知识
](
https://blog.csdn.net/u014427391/article/details/88650696
)
*
[
Oracle性能调优之虚拟索引用法简介
](
https://smilenicky.blog.csdn.net/article/details/89761234
)
*
[
Oracle性能调优之物化视图用法简介
](
https://smilenicky.blog.csdn.net/article/details/89762680
)
*
[
Orace执行计划学习笔记
](
https://smilenicky.blog.csdn.net/article/details/89604262
)
*
[
Oracle共享池分析SQL资源使用情况
](
https://blog.csdn.net/u014427391/article/details/86562755
)
*
MySQL
*
[
MySQL调优之Explain
](
https://smilenicky.blog.csdn.net/article/details/100853310
)
*
[
MySQL调优之索引
](
https://smilenicky.blog.csdn.net/article/details/100846922
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录