Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Eladmin
Commits
1ec10e3d
"src/vscode:/vscode.git/clone" did not exist on "5ae06a867a3323804635b41c6865a3273665ac40"
Commit
1ec10e3d
authored
Dec 31, 2018
by
郑杰
Browse files
v1.3 版本发布,详细信息查看发行版说明
parent
d329b0c8
Changes
48
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
1ec10e3d
# eladmin
项目基于 Spring Boot 2.1.0 、 Spring boot Jpa、 Spring Security、redis、Vue的前后端分离的权限管理系统, 权限控制采用 RBAC 思想,支持
动态路由
、项目1.0版本提供一个纯净的后台管理,第三方工具将在后面的版本中添加
项目基于 Spring Boot 2.1.0 、 Spring boot Jpa、 Spring Security、redis、Vue的前后端分离的权限管理系统, 权限控制采用 RBAC 思想,支持动态路由
#### 前端源码
-
码云:
[
https://gitee.com/elunez/eladmin-qt
](
https://gitee.com/elunez/eladmin-qt
)
...
...
@@ -14,21 +14,29 @@
#### 预览地址
[
http://auauz.net
](
http://auauz.net
)
-
用户名: admin
##### 用户账号
-
管理员: admin
-
测试用户: test
##### 默认密码
-
密码: 123456
#### 系统功能模块
-
用户管理 提供用户的相关配置
-
个人中心 提供修改头像,密码,邮箱验等功能
-
角色管理 角色菜单分配权限
-
权限管理 权限细化到接口
-
菜单管理 已实现动态路由,后端可配置化
-
系统日志 记录用户访问监控异常信息
-
实时控制台 显示logback实时日志
-
实时控制台 显示logback实时日志
,可显示异常堆栈信息
-
redis管理 将redis的操作可视化,提供对redis的基本操作
-
redis限流 对系统的流量进行控制,由
[
everhopingandwaiting
](
https://github.com/everhopingandwaiting
)
提供
-
SQL监控 采用 druid 监控数据库访问性能
-
三方工具: 邮件工具,sm.ms免费图床
-
三方工具: 邮件工具,sm.ms免费图床
,支付宝支付,七牛云存储
-
富文本编辑器
#### 后端技术栈
...
...
@@ -64,11 +72,15 @@
</tr>
<tr>
<td><img
src=
"https://i.loli.net/2018/12/22/5c1e10c7a9f7d.png"
/></td>
<td><img
src=
"https://i.imgur.com/FzVaAlS.png"
/></td>
</tr>
<tr>
<td><img
src=
"https://i.imgur.com/ah3X2HG.png"
/></td>
</tr>
</table>
#### 反馈交流
-
QQ交流群:
891137268
-
QQ交流群:
<a
target=
"_blank"
href=
"//shang.qq.com/wpa/qunwpa?idkey=90830191a40600e3a07acdcc4864890fca50c8e3ca1772e7e288a561d576f6c4"
><img
border=
"0"
src=
"//pub.idqqimg.com/wpa/images/group.png"
alt=
"Quella/el-admin"
title=
"Quella/el-admin"
></a>
-
作者邮箱:elunez@qq.com
pom.xml
View file @
1ec10e3d
...
...
@@ -161,6 +161,20 @@
<version>
1.4.7
</version>
</dependency>
<!--七牛云存储-->
<dependency>
<groupId>
com.qiniu
</groupId>
<artifactId>
qiniu-java-sdk
</artifactId>
<version>
[7.2.0, 7.2.99]
</version>
</dependency>
<!--支付宝依赖-->
<dependency>
<groupId>
com.alipay.sdk
</groupId>
<artifactId>
alipay-sdk-java
</artifactId>
<version>
3.1.0
</version>
</dependency>
</dependencies>
<repositories>
...
...
sql/eladmin.sql
View file @
1ec10e3d
...
...
@@ -11,12 +11,36 @@
Target Server Version : 50559
File Encoding : 65001
Date:
28
/12/2018 1
7
:5
0:46
Date:
31
/12/2018 1
5
:5
2:01
*/
SET
NAMES
utf8mb4
;
SET
FOREIGN_KEY_CHECKS
=
0
;
-- ----------------------------
-- Table structure for alipay_config
-- ----------------------------
DROP
TABLE
IF
EXISTS
`alipay_config`
;
CREATE
TABLE
`alipay_config`
(
`id`
bigint
(
20
)
NOT
NULL
AUTO_INCREMENT
,
`appID`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`charset`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`format`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`gatewayUrl`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`notifyUrl`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`privateKey`
varchar
(
2000
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`publicKey`
varchar
(
2000
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`returnUrl`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`signType`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`sysServiceProviderId`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
2
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Records of alipay_config
-- ----------------------------
INSERT
INTO
`alipay_config`
VALUES
(
1
,
'2016091700532697'
,
'utf-8'
,
'JSON'
,
'https://openapi.alipaydev.com/gateway.do'
,
'http://api.auauz.net/api/aliPay/notify'
,
'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'
,
'http://api.auauz.ne/api/aliPay/return'
,
'RSA2'
,
'2088102176044281'
);
-- ----------------------------
-- Table structure for email_config
-- ----------------------------
...
...
@@ -31,6 +55,24 @@ CREATE TABLE `email_config` (
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
2
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Table structure for log
-- ----------------------------
DROP
TABLE
IF
EXISTS
`log`
;
CREATE
TABLE
`log`
(
`id`
bigint
(
20
)
NOT
NULL
AUTO_INCREMENT
,
`createTime`
datetime
NULL
DEFAULT
NULL
,
`description`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`exceptionDetail`
varchar
(
1500
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`logType`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`method`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`params`
varchar
(
1500
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`requestIp`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`time`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`username`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
4214
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Table structure for menu
-- ----------------------------
...
...
@@ -46,7 +88,7 @@ CREATE TABLE `menu` (
`icon`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`path`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
18
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
20
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Records of menu
...
...
@@ -59,7 +101,7 @@ INSERT INTO `menu` VALUES (5, '2018-12-18 15:17:28', b'0', '菜单管理', 'syst
INSERT
INTO
`menu`
VALUES
(
6
,
'2018-12-18 15:17:48'
,
b
'0'
,
'系统监控'
,
NULL
,
0
,
10
,
'monitor'
,
'monitor'
);
INSERT
INTO
`menu`
VALUES
(
7
,
'2018-12-18 15:18:26'
,
b
'0'
,
'系统日志'
,
'monitor/log/index'
,
6
,
11
,
'log'
,
'logs'
);
INSERT
INTO
`menu`
VALUES
(
8
,
'2018-12-18 15:19:01'
,
b
'0'
,
'系统缓存'
,
'monitor/redis/index'
,
6
,
12
,
'redis'
,
'redis'
);
INSERT
INTO
`menu`
VALUES
(
9
,
'2018-12-18 15:19:34'
,
b
'1'
,
'SQL监控'
,
NULL
,
6
,
14
,
'sqlMonitor'
,
'http://localhost/druid'
);
INSERT
INTO
`menu`
VALUES
(
9
,
'2018-12-18 15:19:34'
,
b
'1'
,
'SQL监控'
,
NULL
,
6
,
14
,
'sqlMonitor'
,
'http://localhost
:8000
/druid'
);
INSERT
INTO
`menu`
VALUES
(
10
,
'2018-12-19 13:38:16'
,
b
'0'
,
'组件管理'
,
NULL
,
0
,
50
,
'zujian'
,
'components'
);
INSERT
INTO
`menu`
VALUES
(
11
,
'2018-12-19 13:38:49'
,
b
'0'
,
'图标库'
,
'components/IconSelect'
,
10
,
51
,
'icon'
,
'icon'
);
INSERT
INTO
`menu`
VALUES
(
12
,
'2018-12-24 20:37:35'
,
b
'0'
,
'实时控制台'
,
'monitor/log/msg'
,
6
,
13
,
'codeConsole'
,
'msg'
);
...
...
@@ -68,6 +110,8 @@ INSERT INTO `menu` VALUES (14, '2018-12-27 10:13:09', b'0', '邮件工具', 'too
INSERT
INTO
`menu`
VALUES
(
15
,
'2018-12-27 11:58:25'
,
b
'0'
,
'富文本'
,
'components/Editor'
,
10
,
52
,
'fwb'
,
'tinymce'
);
INSERT
INTO
`menu`
VALUES
(
16
,
'2018-12-28 09:36:53'
,
b
'0'
,
'SM.MS图床'
,
'tools/picture/index'
,
13
,
22
,
'image'
,
'pictures'
);
INSERT
INTO
`menu`
VALUES
(
17
,
'2018-12-28 15:09:49'
,
b
'1'
,
'项目地址'
,
''
,
0
,
0
,
'github'
,
'https://github.com/elunez/eladmin'
);
INSERT
INTO
`menu`
VALUES
(
18
,
'2018-12-31 11:12:15'
,
b
'0'
,
'七牛云存储'
,
'tools/qiniu/index'
,
13
,
23
,
'qiniu'
,
'qiniu'
);
INSERT
INTO
`menu`
VALUES
(
19
,
'2018-12-31 14:52:38'
,
b
'0'
,
'支付宝工具'
,
'tools/aliPay/index'
,
13
,
24
,
'alipay'
,
'aliPay'
);
-- ----------------------------
-- Table structure for menus_roles
...
...
@@ -102,6 +146,8 @@ INSERT INTO `menus_roles` VALUES (14, 1);
INSERT
INTO
`menus_roles`
VALUES
(
15
,
1
);
INSERT
INTO
`menus_roles`
VALUES
(
16
,
1
);
INSERT
INTO
`menus_roles`
VALUES
(
17
,
1
);
INSERT
INTO
`menus_roles`
VALUES
(
18
,
1
);
INSERT
INTO
`menus_roles`
VALUES
(
19
,
1
);
INSERT
INTO
`menus_roles`
VALUES
(
1
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
2
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
3
,
2
);
...
...
@@ -111,8 +157,11 @@ INSERT INTO `menus_roles` VALUES (6, 2);
INSERT
INTO
`menus_roles`
VALUES
(
9
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
12
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
13
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
14
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
16
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
17
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
18
,
2
);
INSERT
INTO
`menus_roles`
VALUES
(
19
,
2
);
-- ----------------------------
-- Table structure for permission
...
...
@@ -176,12 +225,37 @@ CREATE TABLE `picture` (
`username`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`width`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
38
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
47
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Table structure for qiniu_config
-- ----------------------------
DROP
TABLE
IF
EXISTS
`qiniu_config`
;
CREATE
TABLE
`qiniu_config`
(
`id`
bigint
(
20
)
NOT
NULL
AUTO_INCREMENT
,
`accessKey`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`bucket`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`host`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`secretKey`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`type`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`zone`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
2
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
--
Records of picture
--
Table structure for qiniu_content
-- ----------------------------
INSERT
INTO
`picture`
VALUES
(
34
,
'2018-12-28 16:02:42'
,
'https://sm.ms/delete/JDAtayhFMH56wCXE'
,
'1'
,
'220'
,
'3.73KB '
,
'https://i.loli.net/2018/12/28/5c25d8a253445.jpg'
,
'admin'
,
'229'
);
DROP
TABLE
IF
EXISTS
`qiniu_content`
;
CREATE
TABLE
`qiniu_content`
(
`id`
bigint
(
20
)
NOT
NULL
AUTO_INCREMENT
,
`bucket`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`name`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`size`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`type`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`updateTime`
datetime
NULL
DEFAULT
NULL
,
`url`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
10
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Table structure for role
...
...
@@ -246,8 +320,8 @@ CREATE TABLE `user` (
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT
INTO
`user`
VALUES
(
1
,
'https://i.loli.net/2018/12/
06
/5c
08894d8d
e2
1
.jpg'
,
'2018-08-23 09:11:56'
,
'
zhengjie@tom
.com'
,
1
,
'14e1b600b1fd579f47433b88e8d85291'
,
'admin'
,
'2018-11-23 10:12:36'
);
INSERT
INTO
`user`
VALUES
(
3
,
'https://i.loli.net/2018/12/0
6
/5c
08894d8de2
1.jpg'
,
'2018-12-27 20:05:26'
,
'test@qq.com'
,
1
,
'14e1b600b1fd579f47433b88e8d85291'
,
'test'
,
NULL
);
INSERT
INTO
`user`
VALUES
(
1
,
'https://i.loli.net/2018/12/
31
/5c
297270b20
e2.jpg'
,
'2018-08-23 09:11:56'
,
'
elunez@qq
.com'
,
1
,
'14e1b600b1fd579f47433b88e8d85291'
,
'admin'
,
'2018-11-23 10:12:36'
);
INSERT
INTO
`user`
VALUES
(
3
,
'https://i.loli.net/2018/12/
3
0/5c
2871d6aa10
1.jpg'
,
'2018-12-27 20:05:26'
,
'test@qq.com'
,
1
,
'14e1b600b1fd579f47433b88e8d85291'
,
'test'
,
NULL
);
-- ----------------------------
-- Table structure for users_roles
...
...
@@ -279,8 +353,27 @@ CREATE TABLE `verification_code` (
`status`
bit
(
1
)
NULL
DEFAULT
NULL
,
`type`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`value`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`scenes`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
1
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
32
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Table structure for visits
-- ----------------------------
DROP
TABLE
IF
EXISTS
`visits`
;
CREATE
TABLE
`visits`
(
`id`
bigint
(
20
)
NOT
NULL
AUTO_INCREMENT
,
`date`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`ip_counts`
bigint
(
20
)
NULL
DEFAULT
NULL
,
`pv_counts`
bigint
(
20
)
NULL
DEFAULT
NULL
,
`weekDay`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`createTime`
datetime
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
47
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Compact
;
-- ----------------------------
-- Records of visits
-- ----------------------------
INSERT
INTO
`visits`
VALUES
(
46
,
'2018-12-31'
,
1
,
3
,
'Mon'
,
'2018-12-31 15:50:19'
);
SET
FOREIGN_KEY_CHECKS
=
1
;
src/main/java/me/zhengjie/common/aop/log/LogAspect.java
View file @
1ec10e3d
...
...
@@ -13,6 +13,9 @@ import org.aspectj.lang.annotation.Pointcut;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
/**
* @author jie
* @date 2018-11-24
...
...
src/main/java/me/zhengjie/common/exception/BadRequestException.java
View file @
1ec10e3d
...
...
@@ -3,6 +3,8 @@ package me.zhengjie.common.exception;
import
lombok.Getter
;
import
org.springframework.http.HttpStatus
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
BAD_REQUEST
;
/**
* @author jie
* @date 2018-11-23
...
...
@@ -10,7 +12,15 @@ import org.springframework.http.HttpStatus;
*/
@Getter
public
class
BadRequestException
extends
RuntimeException
{
private
Integer
status
=
BAD_REQUEST
.
value
();
public
BadRequestException
(
String
msg
){
super
(
msg
);
}
public
BadRequestException
(
HttpStatus
status
,
String
msg
){
super
(
msg
);
this
.
status
=
status
.
value
();
}
}
src/main/java/me/zhengjie/common/exception/handler/GlobalExceptionHandler.java
View file @
1ec10e3d
...
...
@@ -6,10 +6,14 @@ import me.zhengjie.common.exception.EntityExistException;
import
me.zhengjie.common.exception.EntityNotFoundException
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.AccessDeniedException
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
BAD_REQUEST
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
FORBIDDEN
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
NOT_FOUND
;
/**
...
...
@@ -20,6 +24,32 @@ import static org.springframework.http.HttpStatus.NOT_FOUND;
@RestControllerAdvice
public
class
GlobalExceptionHandler
{
/**
* 处理所有不可知的异常
* @param e
* @return
*/
@ExceptionHandler
(
Exception
.
class
)
public
ResponseEntity
handleException
(
Exception
e
){
// 打印堆栈信息
log
.
error
(
getStackTrace
(
e
));
ApiError
apiError
=
new
ApiError
(
BAD_REQUEST
.
value
(),
e
.
getMessage
());
return
buildResponseEntity
(
apiError
);
}
/**
* 处理 接口无权访问异常AccessDeniedException
* @param e
* @return
*/
@ExceptionHandler
(
AccessDeniedException
.
class
)
public
ResponseEntity
handleAccessDeniedException
(
AccessDeniedException
e
){
// 打印堆栈信息
log
.
error
(
getStackTrace
(
e
));
ApiError
apiError
=
new
ApiError
(
FORBIDDEN
.
value
(),
e
.
getMessage
());
return
buildResponseEntity
(
apiError
);
}
/**
* 处理自定义异常
* @param e
...
...
@@ -27,8 +57,9 @@ public class GlobalExceptionHandler {
*/
@ExceptionHandler
(
value
=
BadRequestException
.
class
)
public
ResponseEntity
<
ApiError
>
badRequestException
(
BadRequestException
e
)
{
log
.
error
(
e
.
getMessage
());
ApiError
apiError
=
new
ApiError
(
BAD_REQUEST
.
value
(),
e
.
getMessage
());
// 打印堆栈信息
log
.
error
(
getStackTrace
(
e
));
ApiError
apiError
=
new
ApiError
(
e
.
getStatus
(),
e
.
getMessage
());
return
buildResponseEntity
(
apiError
);
}
...
...
@@ -39,7 +70,8 @@ public class GlobalExceptionHandler {
*/
@ExceptionHandler
(
value
=
EntityExistException
.
class
)
public
ResponseEntity
<
ApiError
>
entityExistException
(
EntityExistException
e
)
{
log
.
error
(
e
.
getMessage
());
// 打印堆栈信息
log
.
error
(
getStackTrace
(
e
));
ApiError
apiError
=
new
ApiError
(
BAD_REQUEST
.
value
(),
e
.
getMessage
());
return
buildResponseEntity
(
apiError
);
}
...
...
@@ -51,7 +83,8 @@ public class GlobalExceptionHandler {
*/
@ExceptionHandler
(
value
=
EntityNotFoundException
.
class
)
public
ResponseEntity
<
ApiError
>
entityNotFoundException
(
EntityNotFoundException
e
)
{
log
.
error
(
e
.
getMessage
());
// 打印堆栈信息
log
.
error
(
getStackTrace
(
e
));
ApiError
apiError
=
new
ApiError
(
NOT_FOUND
.
value
(),
e
.
getMessage
());
return
buildResponseEntity
(
apiError
);
}
...
...
@@ -63,7 +96,8 @@ public class GlobalExceptionHandler {
*/
@ExceptionHandler
(
MethodArgumentNotValidException
.
class
)
public
ResponseEntity
<
ApiError
>
handleMethodArgumentNotValidException
(
MethodArgumentNotValidException
e
){
log
.
error
(
e
.
getMessage
());
// 打印堆栈信息
log
.
error
(
getStackTrace
(
e
));
String
[]
str
=
e
.
getBindingResult
().
getAllErrors
().
get
(
0
).
getCodes
()[
1
].
split
(
"\\."
);
StringBuffer
msg
=
new
StringBuffer
(
str
[
1
]+
":"
);
msg
.
append
(
e
.
getBindingResult
().
getAllErrors
().
get
(
0
).
getDefaultMessage
());
...
...
@@ -79,4 +113,21 @@ public class GlobalExceptionHandler {
private
ResponseEntity
<
ApiError
>
buildResponseEntity
(
ApiError
apiError
)
{
return
new
ResponseEntity
(
apiError
,
HttpStatus
.
valueOf
(
apiError
.
getStatus
()));
}
/**
* 获取堆栈信息
* @param throwable
* @return
*/
private
String
getStackTrace
(
Throwable
throwable
)
{
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
);
try
{
throwable
.
printStackTrace
(
pw
);
return
"\n"
+
sw
.
toString
();
}
finally
{
pw
.
close
();
}
}
}
src/main/java/me/zhengjie/common/utils/ElAdminConstant.java
View file @
1ec10e3d
...
...
@@ -7,21 +7,13 @@ package me.zhengjie.common.utils;
*/
public
class
ElAdminConstant
{
/**
* 用于七牛云zone与机房对应关系
*/
public
static
class
QiNiu
{
public
static
final
String
HUAD
=
"华东"
;
public
static
final
String
RESET_PASS
=
"重置密码"
;
public
static
final
String
HUAB
=
"华北
"
;
public
static
final
String
RESET_MAIL
=
"重置邮箱
"
;
public
static
final
String
HUAN
=
"华南
"
;
public
static
final
String
EMAIL_CODE
=
"<p>你的验证码为:
"
;
public
static
final
String
BEIM
=
"北美"
;
public
static
final
String
DNY
=
"东南亚"
;
}
public
static
final
String
EMAIL_CONTENT
=
"<p style='text-align: right;'>----- 邮件来自<span style='color: rgb(194, 79, 74);'> <a href='http://auauz.net' target='_blank'>eladmin</a></span> 后台管理系统,系统邮件请勿回复</p>"
;
/**
* 常用接口
...
...
src/main/java/me/zhengjie/core/config/WebSecurityConfig.java
View file @
1ec10e3d
...
...
@@ -78,12 +78,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.
antMatchers
(
"/auth/**"
).
permitAll
()
.
antMatchers
(
"/websocket/**"
).
permitAll
()
.
antMatchers
(
"/druid/**"
).
anonymous
()
// 支付宝回调
.
antMatchers
(
"/api/aliPay/return"
).
anonymous
()
.
antMatchers
(
"/api/aliPay/notify"
).
anonymous
()
// swagger start
.
antMatchers
(
"/swagger-ui.html"
).
anonymous
()
.
antMatchers
(
"/swagger-resources/**"
).
anonymous
()
.
antMatchers
(
"/webjars/**"
).
anonymous
()
.
antMatchers
(
"/*/api-docs"
).
anonymous
()
// swagger end
.
antMatchers
(
"/test/**"
).
anonymous
()
.
antMatchers
(
HttpMethod
.
OPTIONS
,
"/**"
).
anonymous
()
// 所有请求都需要认证
...
...
@@ -96,21 +102,21 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public
void
configure
(
WebSecurity
web
)
throws
Exception
{
// AuthenticationTokenFilter will ignore the below paths
web
.
ignoring
()
.
antMatchers
(
HttpMethod
.
POST
,
authenticationPath
)
// allow anonymous resource requests
.
and
()
.
ignoring
()
.
antMatchers
(
HttpMethod
.
GET
,
"/*.html"
,
"/**/*.html"
,
"/**/*.css"
,
"/**/*.js"
);
web
.
ignoring
()
.
antMatchers
(
HttpMethod
.
POST
,
authenticationPath
)
// allow anonymous resource requests
.
and
()
.
ignoring
()
.
antMatchers
(
HttpMethod
.
GET
,
"/*.html"
,
"/**/*.html"
,
"/**/*.css"
,
"/**/*.js"
);
}
}
src/main/java/me/zhengjie/core/security/JwtUser.java
View file @
1ec10e3d
...
...
@@ -5,6 +5,8 @@ import lombok.AllArgsConstructor;
import
lombok.Getter
;
import
org.springframework.security.core.GrantedAuthority
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
java.sql.Timestamp
;
import
java.util.*
;
/**
...
...
@@ -32,6 +34,8 @@ public class JwtUser implements UserDetails {
private
final
boolean
enabled
;
private
Timestamp
createTime
;
@JsonIgnore
private
final
Date
lastPasswordResetDate
;
...
...
src/main/java/me/zhengjie/core/service/JwtUserDetailsService.java
View file @
1ec10e3d
...
...
@@ -64,6 +64,7 @@ public class JwtUserDetailsService implements UserDetailsService {
user
.
getEmail
(),
mapToGrantedAuthorities
(
user
.
getRoles
(),
permissionRepository
),
user
.
getEnabled
(),
user
.
getCreateTime
(),
user
.
getLastPasswordResetTime
()
);
}
...
...
src/main/java/me/zhengjie/core/utils/JwtTokenUtil.java
View file @
1ec10e3d
...
...
@@ -5,12 +5,10 @@ import io.jsonwebtoken.impl.DefaultClock;
import
me.zhengjie.common.exception.BadRequestException
;
import
me.zhengjie.core.security.JwtUser
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.authentication.AccountExpiredException
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.StringUtils
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.Serializable
;
import
java.util.Date
;
...
...
@@ -18,13 +16,9 @@ import java.util.HashMap;
import
java.util.Map
;
import
java.util.function.Function
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
UNAUTHORIZED
;
@Component
public
class
JwtTokenUtil
implements
Serializable
{
static
final
String
CLAIM_KEY_USERNAME
=
"sub"
;
static
final
String
CLAIM_KEY_CREATED
=
"iat"
;
private
static
final
long
serialVersionUID
=
-
3301605591108950415L
;
private
Clock
clock
=
DefaultClock
.
INSTANCE
;
...
...
@@ -129,7 +123,7 @@ public class JwtTokenUtil implements Serializable {
String
authToken
=
request
.
getHeader
(
tokenHeader
);
if
(
StringUtils
.
isEmpty
(
authToken
)||
authToken
.
length
()<
7
){
throw
new
AccountExpiredException
(
"令牌已过期或
无效"
);
throw
new
BadRequestException
(
HttpStatus
.
FORBIDDEN
,
"Token令牌
无效"
);
}
final
String
token
=
authToken
.
substring
(
7
);
...
...
@@ -137,11 +131,7 @@ public class JwtTokenUtil implements Serializable {
try
{
username
=
getUsernameFromToken
(
token
);
}
catch
(
ExpiredJwtException
e
){
throw
new
AccountExpiredException
(
"令牌已过期或无效"
);
}
if
(
StringUtils
.
isEmpty
(
username
)){
throw
new
AccountExpiredException
(
"令牌已过期或无效"
);
throw
new
BadRequestException
(
HttpStatus
.
UNAUTHORIZED
,
"Token令牌已过期"
);
}
return
username
;
...
...
src/main/java/me/zhengjie/monitor/config/LogFilter.java
View file @
1ec10e3d
...
...
@@ -20,19 +20,12 @@ public class LogFilter extends Filter<ILoggingEvent>{
public
FilterReply
decide
(
ILoggingEvent
event
)
{
String
exception
=
""
;
IThrowableProxy
iThrowableProxy1
=
event
.
getThrowableProxy
();
if
(
iThrowableProxy1
!=
null
){
exception
=
"<span class='excehtext'>"
+
iThrowableProxy1
.
getClassName
()+
" "
+
iThrowableProxy1
.
getMessage
()+
"</span></br>"
;
for
(
int
i
=
0
;
i
<
iThrowableProxy1
.
getStackTraceElementProxyArray
().
length
;
i
++){
exception
+=
"<span class='excetext'>"
+
iThrowableProxy1
.
getStackTraceElementProxyArray
()[
i
].
toString
()+
"</span></br>"
;
}
}
LogMessage
loggerMessage
=
new
LogMessage
(
event
.
getFormattedMessage
()
/* repair format message*/
,
DateFormat
.
getDateTimeInstance
().
format
(
new
Date
(
event
.
getTimeStamp
())),
event
.
getFormattedMessage
()
,
DateFormat
.
getDateTimeInstance
().
format
(
new
Date
(
event
.
getTimeStamp
())),
event
.
getThreadName
(),
event
.
getLoggerName
(),
event
.
getLevel
().
levelStr
,
exception
event
.
getLevel
().
levelStr
);
LoggerQueue
.
getInstance
().
push
(
loggerMessage
);
return
FilterReply
.
ACCEPT
;
...
...
src/main/java/me/zhengjie/monitor/config/WebSocketConfig.java
View file @
1ec10e3d
...
...
@@ -45,6 +45,10 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
try
{
LogMessage
log
=
LoggerQueue
.
getInstance
().
poll
();
if
(
log
!=
null
){
// 格式化异常堆栈信息
if
(
"ERROR"
.
equals
(
log
.
getLevel
())
&&
"me.zhengjie.common.exception.handler.GlobalExceptionHandler"
.
equals
(
log
.
getClassName
())){
log
.
setBody
(
"<pre>"
+
log
.
getBody
()+
"</pre>"
);
}
if
(
log
.
getClassName
().
equals
(
"jdbc.resultsettable"
)){
log
.
setBody
(
"<br><pre>"
+
log
.
getBody
()+
"</pre>"
);
}
...
...
src/main/java/me/zhengjie/monitor/domain/LogMessage.java
View file @
1ec10e3d
...
...
@@ -16,5 +16,4 @@ public class LogMessage {
private
String
threadName
;
private
String
className
;
private
String
level
;
private
String
exception
;
}
src/main/java/me/zhengjie/monitor/domain/Logging.java
View file @
1ec10e3d
...
...
@@ -38,6 +38,7 @@ public class Logging {
/**
* 参数
*/
@Column
(
length
=
1500
)
private
String
params
;
/**
...
...
@@ -58,6 +59,7 @@ public class Logging {
/**
* 异常详细
*/
@Column
(
length
=
1500
)
private
String
exceptionDetail
;
/**
...
...
src/main/java/me/zhengjie/monitor/service/impl/LoggingServiceImpl.java
View file @
1ec10e3d
...
...
@@ -83,7 +83,9 @@ public class LoggingServiceImpl implements LoggingService {
username
=
user
.
getUsername
();
}
logging
.
setMethod
(
methodName
);
if
(
params
.
length
()
>
1000
){
params
=
params
.
substring
(
0
,
999
);
}
logging
.
setUsername
(
username
);
logging
.
setParams
(
params
+
" }"
);
loggingRepository
.
save
(
logging
);
...
...
src/main/java/me/zhengjie/system/domain/VerificationCode.java
View file @
1ec10e3d
package
me.zhengjie.system.domain
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.hibernate.annotations.CreationTimestamp
;
import
javax.persistence.*
;
import
javax.validation.constraints.NotBlank
;
import
java.sql.Timestamp
;
/**
...
...
@@ -12,6 +15,8 @@ import java.sql.Timestamp;
*/
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table
(
name
=
"verification_code"
)
public
class
VerificationCode
{
...
...
@@ -22,7 +27,12 @@ public class VerificationCode {
private
String
code
;
/**
* true 为有效,false 为无效
* 使用场景,自己定义
*/
private
String
scenes
;
/**
* true 为有效,false 为无效,验证时状态+时间+具体的邮箱或者手机号
*/
private
Boolean
status
=
true
;
...
...
@@ -30,11 +40,13 @@ public class VerificationCode {
/**
* 类型 :phone 和 email
*/
@NotBlank
private
String
type
;
/**
* 具体的phone与email
*/
@NotBlank
private
String
value
;
/**
...
...
@@ -42,4 +54,11 @@ public class VerificationCode {
*/
@CreationTimestamp
private
Timestamp
createTime
;
public
VerificationCode
(
String
code
,
String
scenes
,
@NotBlank
String
type
,
@NotBlank
String
value
)
{
this
.
code
=
code
;
this
.
scenes
=
scenes
;
this
.
type
=
type
;
this
.
value
=
value
;
}
}
src/main/java/me/zhengjie/system/repository/UserRepository.java
View file @
1ec10e3d
...
...
@@ -3,6 +3,7 @@ package me.zhengjie.system.repository;
import
me.zhengjie.system.domain.User
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.data.jpa.repository.Modifying
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.query.Param
;
...
...
@@ -27,4 +28,31 @@ public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificat
*/
@Query
(
"from User u join fetch u.roles where u.email = :email"
)
User
findByEmail
(
@Param
(
"email"
)
String
email
);
/**
* 修改密码
* @param id
* @param pass
*/
@Modifying
@Query
(
value
=
"update user set password = ?2 where id = ?1"
,
nativeQuery
=
true
)
void
updatePass
(
Long
id
,
String
pass
);
/**
* 修改头像
* @param id
* @param url
*/
@Modifying
@Query
(
value
=
"update user set avatar = ?2 where id = ?1"
,
nativeQuery
=
true
)
void
updateAvatar
(
Long
id
,
String
url
);
/**
* 修改邮箱
* @param id
* @param email
*/
@Modifying
@Query
(
value
=
"update user set email = ?2 where id = ?1"
,
nativeQuery
=
true
)
void
updateEmail
(
Long
id
,
String
email
);
}
src/main/java/me/zhengjie/system/repository/VerificationCodeRepository.java
View file @
1ec10e3d
...
...
@@ -9,4 +9,12 @@ import org.springframework.data.jpa.repository.JpaRepository;
*/
public
interface
VerificationCodeRepository
extends
JpaRepository
<
VerificationCode
,
Long
>
{
/**
* 获取有效的验证码
* @param scenes 业务场景,如重置密码,重置邮箱等等
* @param type
* @param value
* @return
*/
VerificationCode
findByScenesAndTypeAndValueAndStatusIsTrue
(
String
scenes
,
String
type
,
String
value
);
}
src/main/java/me/zhengjie/system/rest/UserController.java
View file @
1ec10e3d
...
...
@@ -2,17 +2,31 @@ package me.zhengjie.system.rest;
import
me.zhengjie.common.aop.log.Log
;
import
me.zhengjie.common.exception.BadRequestException
;
import
me.zhengjie.common.utils.ElAdminConstant
;
import
me.zhengjie.common.utils.RequestHolder
;
import
me.zhengjie.core.security.JwtUser
;
import
me.zhengjie.core.utils.EncryptUtils
;
import
me.zhengjie.core.utils.JwtTokenUtil
;
import
me.zhengjie.system.domain.User
;
import
me.zhengjie.system.domain.VerificationCode
;
import
me.zhengjie.system.service.UserService
;
import
me.zhengjie.system.service.VerificationCodeService
;
import
me.zhengjie.system.service.dto.UserDTO
;
import
me.zhengjie.system.service.query.UserQueryService
;
import
me.zhengjie.tools.domain.Picture
;
import
me.zhengjie.tools.service.PictureService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @author jie
...
...
@@ -28,6 +42,20 @@ public class UserController {
@Autowired
private
UserQueryService
userQueryService
;
@Autowired
private
JwtTokenUtil
jwtTokenUtil
;
@Autowired
@Qualifier
(
"jwtUserDetailsService"
)
private
UserDetailsService
userDetailsService
;
@Autowired
private
PictureService
pictureService
;
@Autowired
private
VerificationCodeService
verificationCodeService
;
private
static
final
String
ENTITY_NAME
=
"user"
;
@GetMapping
(
value
=
"/users/{id}"
)
...
...
@@ -71,4 +99,66 @@ public class UserController {
userService
.
delete
(
id
);
return
new
ResponseEntity
(
HttpStatus
.
OK
);
}
/**
* 验证密码
* @param pass
* @return
*/
@GetMapping
(
value
=
"/users/validPass/{pass}"
)
public
ResponseEntity
validPass
(
@PathVariable
String
pass
){
JwtUser
jwtUser
=
(
JwtUser
)
userDetailsService
.
loadUserByUsername
(
jwtTokenUtil
.
getUserName
(
RequestHolder
.
getHttpServletRequest
()));
Map
map
=
new
HashMap
();
map
.
put
(
"status"
,
200
);
if
(!
jwtUser
.
getPassword
().
equals
(
EncryptUtils
.
encryptPassword
(
pass
))){
map
.
put
(
"status"
,
400
);
}
return
new
ResponseEntity
(
map
,
HttpStatus
.
OK
);
}
/**
* 修改密码
* @param pass
* @return
*/
@GetMapping
(
value
=
"/users/updatePass/{pass}"
)
public
ResponseEntity
updatePass
(
@PathVariable
String
pass
){
JwtUser
jwtUser
=
(
JwtUser
)
userDetailsService
.
loadUserByUsername
(
jwtTokenUtil
.
getUserName
(
RequestHolder
.
getHttpServletRequest
()));
if
(
jwtUser
.
getPassword
().
equals
(
EncryptUtils
.
encryptPassword
(
pass
))){
throw
new
BadRequestException
(
"新密码不能与旧密码相同"
);
}
userService
.
updatePass
(
jwtUser
,
EncryptUtils
.
encryptPassword
(
pass
));
return
new
ResponseEntity
(
HttpStatus
.
OK
);
}
/**
* 修改头像
* @param file
* @return
*/
@PostMapping
(
value
=
"/users/updateAvatar"
)
public
ResponseEntity
updateAvatar
(
@RequestParam
MultipartFile
file
){
JwtUser
jwtUser
=
(
JwtUser
)
userDetailsService
.
loadUserByUsername
(
jwtTokenUtil
.
getUserName
(
RequestHolder
.
getHttpServletRequest
()));
Picture
picture
=
pictureService
.
upload
(
file
,
jwtUser
.
getUsername
());
userService
.
updateAvatar
(
jwtUser
,
picture
.
getUrl
());
return
new
ResponseEntity
(
HttpStatus
.
OK
);
}
/**
* 修改邮箱
* @param user
* @param user
* @return
*/
@PostMapping
(
value
=
"/users/updateEmail/{code}"
)
public
ResponseEntity
updateEmail
(
@PathVariable
String
code
,
@RequestBody
User
user
){
JwtUser
jwtUser
=
(
JwtUser
)
userDetailsService
.
loadUserByUsername
(
jwtTokenUtil
.
getUserName
(
RequestHolder
.
getHttpServletRequest
()));
if
(!
jwtUser
.
getPassword
().
equals
(
EncryptUtils
.
encryptPassword
(
user
.
getPassword
()))){
throw
new
BadRequestException
(
"密码错误"
);
}
VerificationCode
verificationCode
=
new
VerificationCode
(
code
,
ElAdminConstant
.
RESET_MAIL
,
"email"
,
user
.
getEmail
());
verificationCodeService
.
validated
(
verificationCode
);
userService
.
updateEmail
(
jwtUser
,
user
.
getEmail
());
return
new
ResponseEntity
(
HttpStatus
.
OK
);
}
}
Prev
1
2
3
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment