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
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