Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
holmes
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QA
holmes
Commits
e6a3713d
Commit
e6a3713d
authored
Jul 06, 2021
by
黎博
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into k8s
parents
4c9da3d6
58b65cb8
Changes
50
Hide whitespace changes
Inline
Side-by-side
Showing
50 changed files
with
1425 additions
and
1 deletion
+1425
-1
ExceptionHandlerAdvice.java
...main/java/cn/qg/holmes/aspect/ExceptionHandlerAdvice.java
+31
-0
HttpLogAspect.java
src/main/java/cn/qg/holmes/aspect/HttpLogAspect.java
+2
-0
PermissionAspect.java
src/main/java/cn/qg/holmes/aspect/PermissionAspect.java
+74
-0
Logical.java
src/main/java/cn/qg/holmes/config/annotation/Logical.java
+5
-0
RequiresPermissions.java
...a/cn/qg/holmes/config/annotation/RequiresPermissions.java
+14
-0
PermissionController.java
...va/cn/qg/holmes/controller/auth/PermissionController.java
+72
-0
RoleController.java
...ain/java/cn/qg/holmes/controller/auth/RoleController.java
+81
-0
RolePermissionController.java
...n/qg/holmes/controller/auth/RolePermissionController.java
+137
-0
UserController.java
...ain/java/cn/qg/holmes/controller/auth/UserController.java
+95
-0
UserRoleController.java
...java/cn/qg/holmes/controller/auth/UserRoleController.java
+61
-0
AutoModuleController.java
...va/cn/qg/holmes/controller/auto/AutoModuleController.java
+5
-1
AutoProjectController.java
...a/cn/qg/holmes/controller/auto/AutoProjectController.java
+4
-0
InterfaceController.java
...ava/cn/qg/holmes/controller/auto/InterfaceController.java
+4
-0
SceneController.java
...in/java/cn/qg/holmes/controller/auto/SceneController.java
+4
-0
TestcaseController.java
...java/cn/qg/holmes/controller/auto/TestcaseController.java
+4
-0
PipelineController.java
...va/cn/qg/holmes/controller/gitlab/PipelineController.java
+4
-0
JiraController.java
...ain/java/cn/qg/holmes/controller/jira/JiraController.java
+3
-0
MockController.java
...ain/java/cn/qg/holmes/controller/mock/MockController.java
+3
-0
LoginVo.java
src/main/java/cn/qg/holmes/entity/auth/LoginVo.java
+14
-0
Permission.java
src/main/java/cn/qg/holmes/entity/auth/Permission.java
+22
-0
Role.java
src/main/java/cn/qg/holmes/entity/auth/Role.java
+19
-0
RolePermission.java
src/main/java/cn/qg/holmes/entity/auth/RolePermission.java
+20
-0
RolePermissionVo.java
src/main/java/cn/qg/holmes/entity/auth/RolePermissionVo.java
+13
-0
User.java
src/main/java/cn/qg/holmes/entity/auth/User.java
+35
-0
UserInfoVo.java
src/main/java/cn/qg/holmes/entity/auth/UserInfoVo.java
+18
-0
UserRole.java
src/main/java/cn/qg/holmes/entity/auth/UserRole.java
+31
-0
TokenInvalidException.java
...in/java/cn/qg/holmes/exception/TokenInvalidException.java
+8
-0
UnauthorizedException.java
...in/java/cn/qg/holmes/exception/UnauthorizedException.java
+7
-0
PermissionMapper.java
src/main/java/cn/qg/holmes/mapper/auth/PermissionMapper.java
+7
-0
RoleMapper.java
src/main/java/cn/qg/holmes/mapper/auth/RoleMapper.java
+7
-0
RolePermissionMapper.java
...n/java/cn/qg/holmes/mapper/auth/RolePermissionMapper.java
+7
-0
UserMapper.java
src/main/java/cn/qg/holmes/mapper/auth/UserMapper.java
+13
-0
UserRoleMapper.java
src/main/java/cn/qg/holmes/mapper/auth/UserRoleMapper.java
+7
-0
LdapService.java
src/main/java/cn/qg/holmes/service/auth/LdapService.java
+10
-0
LoginService.java
src/main/java/cn/qg/holmes/service/auth/LoginService.java
+6
-0
PermissionService.java
...ain/java/cn/qg/holmes/service/auth/PermissionService.java
+12
-0
RolePermissionService.java
...java/cn/qg/holmes/service/auth/RolePermissionService.java
+14
-0
RoleService.java
src/main/java/cn/qg/holmes/service/auth/RoleService.java
+7
-0
TokenService.java
src/main/java/cn/qg/holmes/service/auth/TokenService.java
+12
-0
UserRoleService.java
src/main/java/cn/qg/holmes/service/auth/UserRoleService.java
+10
-0
UserService.java
src/main/java/cn/qg/holmes/service/auth/UserService.java
+16
-0
LdapServiceImpl.java
.../java/cn/qg/holmes/service/auth/impl/LdapServiceImpl.java
+113
-0
LoginServiceImpl.java
...java/cn/qg/holmes/service/auth/impl/LoginServiceImpl.java
+59
-0
PermissionServiceImpl.java
...cn/qg/holmes/service/auth/impl/PermissionServiceImpl.java
+52
-0
RolePermissionServiceImpl.java
...g/holmes/service/auth/impl/RolePermissionServiceImpl.java
+52
-0
RoleServiceImpl.java
.../java/cn/qg/holmes/service/auth/impl/RoleServiceImpl.java
+11
-0
TokenServiceImpl.java
...java/cn/qg/holmes/service/auth/impl/TokenServiceImpl.java
+97
-0
UserRoleServiceImpl.java
...a/cn/qg/holmes/service/auth/impl/UserRoleServiceImpl.java
+31
-0
UserServiceImpl.java
.../java/cn/qg/holmes/service/auth/impl/UserServiceImpl.java
+76
-0
UserMapper.xml
src/main/resources/mapper/auth/UserMapper.xml
+16
-0
No files found.
src/main/java/cn/qg/holmes/aspect/ExceptionHandlerAdvice.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
aspect
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.exception.TokenInvalidException
;
import
cn.qg.holmes.exception.UnauthorizedException
;
import
org.springframework.web.bind.annotation.ControllerAdvice
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.ResponseBody
;
@ControllerAdvice
@ResponseBody
public
class
ExceptionHandlerAdvice
{
@ExceptionHandler
(
UnauthorizedException
.
class
)
public
JsonResult
handleException
(
UnauthorizedException
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"权限不足!"
,
false
);
}
@ExceptionHandler
(
TokenInvalidException
.
class
)
public
JsonResult
handleException
(
TokenInvalidException
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"登录已失效,请重新登录!"
,
false
);
}
@ExceptionHandler
(
Exception
.
class
)
public
JsonResult
handleException
(
Exception
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"系统异常!"
,
false
);
}
}
src/main/java/cn/qg/holmes/aspect/HttpLogAspect.java
View file @
e6a3713d
...
...
@@ -10,6 +10,7 @@ import org.aspectj.lang.annotation.Before;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
...
...
@@ -24,6 +25,7 @@ import java.util.Map;
*/
@Aspect
@Component
@Order
(
1
)
public
class
HttpLogAspect
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
HttpLogAspect
.
class
);
...
...
src/main/java/cn/qg/holmes/aspect/PermissionAspect.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
aspect
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.Logical
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auth.UserInfoVo
;
import
cn.qg.holmes.exception.UnauthorizedException
;
import
cn.qg.holmes.service.auth.TokenService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.Signature
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Before
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Arrays
;
import
java.util.Set
;
@Aspect
@Slf4j
@Component
@Order
(
3
)
public
class
PermissionAspect
{
@Autowired
TokenService
tokenService
;
@Before
(
"@annotation(cn.qg.holmes.config.annotation.RequiresPermissions)"
)
public
void
before
(
JoinPoint
joinPoint
)
{
log
.
debug
(
"开始执行权限检查"
);
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
HttpServletRequest
request
=
attributes
.
getRequest
();
String
token
=
request
.
getHeader
(
"token"
);
if
(
token
==
null
)
{
throw
new
UnauthorizedException
();
}
UserInfoVo
userInfoVo
=
tokenService
.
getUserInfoFromCache
(
token
);
Set
<
String
>
myCodes
=
userInfoVo
.
getPermissionCodeList
();
Signature
signature
=
joinPoint
.
getSignature
();
MethodSignature
methodSignature
=
(
MethodSignature
)
signature
;
RequiresPermissions
a
=
methodSignature
.
getMethod
().
getAnnotation
(
RequiresPermissions
.
class
);
String
[]
perms
=
a
.
value
();
log
.
debug
(
"校验权限code: {}"
,
Arrays
.
toString
(
perms
));
log
.
debug
(
"用户已有权限: {}"
,
myCodes
);
// 对比[要求]的code和[用户实际拥有]的code
if
(
a
.
logical
()
==
Logical
.
AND
)
{
// 必须包含要求的每个权限
for
(
String
perm:
perms
)
{
if
(!
myCodes
.
contains
(
perm
))
{
log
.
warn
(
"用户缺少权限 code : {}"
,
perm
);
throw
new
UnauthorizedException
();
//抛出[权限不足]的异常
}
}
}
else
{
// 多个权限只需包含其中一种即可
boolean
flag
=
false
;
for
(
String
perm
:
perms
)
{
if
(
myCodes
.
contains
(
perm
))
{
flag
=
true
;
break
;
}
}
if
(!
flag
)
{
log
.
warn
(
"用户缺少权限 code= : {} (任意有一种即可)"
,
Arrays
.
toString
(
perms
));
throw
new
UnauthorizedException
();
//抛出[权限不足]的异常
}
}
}
}
src/main/java/cn/qg/holmes/config/annotation/Logical.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
config
.
annotation
;
public
enum
Logical
{
AND
,
OR
}
src/main/java/cn/qg/holmes/config/annotation/RequiresPermissions.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
config
.
annotation
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
@Target
({
ElementType
.
TYPE
,
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
RequiresPermissions
{
String
[]
value
();
Logical
logical
()
default
Logical
.
AND
;
}
src/main/java/cn/qg/holmes/controller/auth/PermissionController.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auth
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.entity.auth.Permission
;
import
cn.qg.holmes.service.auth.PermissionService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@CrossOrigin
@RestController
@RequestMapping
(
"/permission"
)
public
class
PermissionController
{
@Autowired
PermissionService
permissionService
;
/**
* 新增权限
* @param permission 权限实体
* @return
*/
@PostMapping
(
"/add"
)
public
JsonResult
addPermission
(
@RequestBody
Permission
permission
)
{
return
JsonResult
.
buildSuccessResult
(
permissionService
.
save
(
permission
));
}
/**
* 编辑权限
* @param permission 权限实体
* @return
*/
@PostMapping
(
"/edit"
)
public
JsonResult
editPermission
(
@RequestBody
Permission
permission
)
{
return
JsonResult
.
buildSuccessResult
(
permissionService
.
saveOrUpdate
(
permission
));
}
/**
* 删除权限
* @param permissionId 权限id
* @return
*/
@GetMapping
(
"/del"
)
public
JsonResult
delPermission
(
@RequestParam
Integer
permissionId
)
{
return
JsonResult
.
buildSuccessResult
(
permissionService
.
removeById
(
permissionId
));
}
/**
* 获取权限列表
* @return
*/
@GetMapping
(
"/list"
)
public
JsonResult
getPermissionList
()
{
return
JsonResult
.
buildSuccessResult
(
permissionService
.
getPermissionList
());
}
@GetMapping
(
"/list/paging"
)
public
JsonResult
getPermissionListByPage
(
@RequestParam
Integer
pageNum
,
@RequestParam
Integer
pageSize
)
{
IPage
<
Permission
>
iPage
=
new
Page
<>(
pageNum
,
pageSize
);
IPage
page
=
permissionService
.
page
(
iPage
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"total"
,
page
.
getTotal
());
map
.
put
(
"list"
,
page
.
getRecords
());
return
JsonResult
.
buildSuccessResult
(
map
);
}
}
src/main/java/cn/qg/holmes/controller/auth/RoleController.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auth
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.entity.auth.*
;
import
cn.qg.holmes.service.auth.*
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.*
;
@CrossOrigin
@RestController
@RequestMapping
(
"/role"
)
public
class
RoleController
{
@Autowired
RoleService
roleService
;
@Autowired
UserRoleService
userRoleService
;
@Autowired
UserService
userService
;
@Autowired
RolePermissionService
rolePermissionService
;
@Autowired
PermissionService
permissionService
;
/**
* 获取角色列表
* @param pageNum 第几页
* @param pageSize 每页多少个
* @return
*/
@GetMapping
(
"/list"
)
public
JsonResult
getRoleList
(
@RequestParam
Integer
pageNum
,
@RequestParam
Integer
pageSize
)
{
IPage
<
Role
>
roleIPage
=
new
Page
<>(
pageNum
,
pageSize
);
IPage
page
=
roleService
.
page
(
roleIPage
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
List
<
Map
<
String
,
Object
>>
roleTotalInfoList
=
new
ArrayList
<>();
List
<
Role
>
roleList
=
page
.
getRecords
();
for
(
Role
role:
roleList
)
{
Map
<
String
,
Object
>
roleInfoMap
=
new
HashMap
<>();
QueryWrapper
<
UserRole
>
userRoleQueryWrapper
=
new
QueryWrapper
<>();
QueryWrapper
<
RolePermission
>
rolePermissionQueryWrapper
=
new
QueryWrapper
<>();
Integer
roleId
=
role
.
getId
();
userRoleQueryWrapper
.
eq
(
"role_id"
,
roleId
);
rolePermissionQueryWrapper
.
eq
(
"role_id"
,
roleId
);
List
<
UserRole
>
userRoleList
=
userRoleService
.
list
(
userRoleQueryWrapper
);
List
<
RolePermission
>
rolePermissionList
=
rolePermissionService
.
list
(
rolePermissionQueryWrapper
);
List
<
String
>
usernameList
=
new
ArrayList
<>();
List
<
Integer
>
permissionIdList
=
new
ArrayList
<>();
for
(
UserRole
userRole:
userRoleList
)
{
User
user
=
userService
.
getById
(
userRole
.
getUserId
());
usernameList
.
add
(
user
.
getUsername
());
}
for
(
RolePermission
rolePermission:
rolePermissionList
)
{
Permission
permission
=
permissionService
.
getById
(
rolePermission
.
getPermissionId
());
permissionIdList
.
add
(
permission
.
getId
());
}
userRoleQueryWrapper
.
clear
();
rolePermissionQueryWrapper
.
clear
();
roleInfoMap
.
put
(
"roleId"
,
role
.
getId
());
roleInfoMap
.
put
(
"roleName"
,
role
.
getRoleName
());
roleInfoMap
.
put
(
"usernameList"
,
usernameList
);
roleInfoMap
.
put
(
"permissionIdList"
,
permissionIdList
);
roleInfoMap
.
put
(
"createTime"
,
role
.
getCreateTime
());
roleInfoMap
.
put
(
"updateTime"
,
role
.
getUpdateTime
());
roleTotalInfoList
.
add
(
roleInfoMap
);
}
map
.
put
(
"total"
,
page
.
getTotal
());
map
.
put
(
"list"
,
roleTotalInfoList
);
return
JsonResult
.
buildSuccessResult
(
map
);
}
}
src/main/java/cn/qg/holmes/controller/auth/RolePermissionController.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auth
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auth.Role
;
import
cn.qg.holmes.entity.auth.RolePermission
;
import
cn.qg.holmes.entity.auth.RolePermissionVo
;
import
cn.qg.holmes.service.auth.RolePermissionService
;
import
cn.qg.holmes.service.auth.RoleService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.api.R
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.List
;
@CrossOrigin
@RestController
@RequestMapping
(
"/role/permission"
)
public
class
RolePermissionController
{
@Autowired
RolePermissionService
rolePermissionService
;
@Autowired
RoleService
roleService
;
/**
* 新增角色权限
* @return
*/
@RequiresPermissions
(
"role:permission:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addRolePermission
(
@RequestBody
RolePermissionVo
rolePermissionVo
)
{
String
roleName
=
rolePermissionVo
.
getRoleName
();
List
<
Integer
>
permissionIdList
=
rolePermissionVo
.
getPermissionIdList
();
QueryWrapper
<
Role
>
roleQueryWrapper
=
new
QueryWrapper
<>();
roleQueryWrapper
.
eq
(
"role_name"
,
roleName
);
if
(
roleService
.
getOne
(
roleQueryWrapper
)
!=
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"角色名已存在!"
,
false
);
}
Role
role
=
new
Role
();
role
.
setRoleName
(
rolePermissionVo
.
getRoleName
());
boolean
result
=
roleService
.
save
(
role
);
if
(!
result
)
{
return
JsonResult
.
buildErrorStateResult
(
"新建角色失败!"
,
false
);
}
Role
newRole
=
roleService
.
getOne
(
roleQueryWrapper
);
Integer
roleId
=
newRole
.
getId
();
List
<
RolePermission
>
rolePermissionList
=
new
ArrayList
<>();
for
(
Integer
permissionId:
permissionIdList
)
{
RolePermission
rolePermission
=
new
RolePermission
();
rolePermission
.
setRoleId
(
roleId
);
rolePermission
.
setPermissionId
(
permissionId
);
rolePermissionList
.
add
(
rolePermission
);
}
return
JsonResult
.
buildSuccessResult
(
rolePermissionService
.
saveBatch
(
rolePermissionList
));
}
/**
* 编辑角色权限
* @return
*/
@RequiresPermissions
(
"role:permission:edit"
)
@PostMapping
(
"/edit"
)
public
JsonResult
editRolePermission
(
@RequestBody
RolePermissionVo
rolePermissionVo
)
{
Integer
roleId
=
rolePermissionVo
.
getRoleId
();
String
roleName
=
rolePermissionVo
.
getRoleName
();
Role
role
=
new
Role
();
role
.
setId
(
roleId
);
role
.
setRoleName
(
roleName
);
boolean
editRoleResult
=
roleService
.
saveOrUpdate
(
role
);
if
(!
editRoleResult
)
{
return
JsonResult
.
buildErrorStateResult
(
"修改角色失败!"
,
false
);
}
try
{
QueryWrapper
<
RolePermission
>
rolePermissionQueryWrapper
=
new
QueryWrapper
<>();
rolePermissionQueryWrapper
.
eq
(
"role_id"
,
roleId
);
// 先查出数据库里有哪些
List
<
RolePermission
>
rolePermissionListInDB
=
rolePermissionService
.
list
(
rolePermissionQueryWrapper
);
List
<
Integer
>
permissionIdList
=
rolePermissionVo
.
getPermissionIdList
();
// 循环删除需要删除的
for
(
RolePermission
rolePermission:
rolePermissionListInDB
)
{
if
(!
permissionIdList
.
contains
(
rolePermission
.
getPermissionId
()))
{
rolePermissionService
.
removeById
(
rolePermission
.
getId
());
}
}
rolePermissionQueryWrapper
.
clear
();
// 然后处理需要新增或修改的
for
(
Integer
permissionId:
permissionIdList
)
{
rolePermissionQueryWrapper
.
eq
(
"role_id"
,
roleId
);
rolePermissionQueryWrapper
.
eq
(
"permission_id"
,
permissionId
);
RolePermission
rolePermission
=
rolePermissionService
.
getOne
(
rolePermissionQueryWrapper
);
if
(
rolePermission
==
null
)
{
rolePermission
=
new
RolePermission
();
rolePermission
.
setRoleId
(
roleId
);
rolePermission
.
setPermissionId
(
permissionId
);
rolePermissionService
.
saveOrUpdate
(
rolePermission
);
}
else
{
rolePermission
.
setRoleId
(
roleId
);
rolePermission
.
setPermissionId
(
permissionId
);
rolePermissionService
.
saveOrUpdate
(
rolePermission
);
}
rolePermissionQueryWrapper
.
clear
();
}
return
JsonResult
.
buildSuccessResult
(
true
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"角色权限分配失败!"
,
false
);
}
}
/**
* 删除角色以及角色对应权限
* @param roleId 角色id
* @return
*/
@RequiresPermissions
(
"role:permission:del"
)
@GetMapping
(
"/del"
)
public
JsonResult
delRolePermission
(
Integer
roleId
)
{
try
{
roleService
.
removeById
(
roleId
);
QueryWrapper
<
RolePermission
>
rolePermissionQueryWrapper
=
new
QueryWrapper
<>();
rolePermissionQueryWrapper
.
eq
(
"role_id"
,
roleId
);
List
<
RolePermission
>
rolePermissionList
=
rolePermissionService
.
list
(
rolePermissionQueryWrapper
);
for
(
RolePermission
rolePermission:
rolePermissionList
)
{
rolePermissionService
.
removeById
(
rolePermission
.
getId
());
}
return
JsonResult
.
buildSuccessResult
(
true
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"角色删除失败!"
,
false
);
}
}
}
src/main/java/cn/qg/holmes/controller/auth/UserController.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auth
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.entity.auth.LoginVo
;
import
cn.qg.holmes.entity.auth.User
;
import
cn.qg.holmes.entity.auth.UserInfoVo
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
cn.qg.holmes.service.auth.LoginService
;
import
cn.qg.holmes.service.auth.TokenService
;
import
cn.qg.holmes.service.auth.UserRoleService
;
import
cn.qg.holmes.service.auth.UserService
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.DigestUtils
;
import
org.springframework.web.bind.annotation.*
;
import
java.nio.charset.StandardCharsets
;
import
java.util.HashMap
;
import
java.util.Map
;
@CrossOrigin
@RequestMapping
(
"/user"
)
@RestController
public
class
UserController
{
@Autowired
UserService
userService
;
@Autowired
UserRoleService
userRoleService
;
@Autowired
LoginService
loginService
;
@Autowired
TokenService
tokenService
;
/**
* 登录,鉴权走ldap
* @return
*/
@PostMapping
(
"/login"
)
public
JsonResult
login
(
@RequestBody
LoginVo
loginVo
)
{
String
username
=
loginVo
.
getUsername
();
String
password
=
loginVo
.
getPassword
();
boolean
loginResult
=
loginService
.
login
(
username
,
password
);
if
(!
loginResult
)
{
return
JsonResult
.
buildErrorStateResult
(
"用户名或密码错误"
,
false
);
}
User
user
=
userService
.
getUserByUsername
(
username
);
// 生成token,并将信息保存到redis
String
token
=
tokenService
.
generateToken
(
user
.
getId
());
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"token"
,
token
);
// map.put("data", userService.getUserInfoByUsername(username));
return
JsonResult
.
buildSuccessResult
(
map
);
}
/**
* 登出
* @param token token
* @return
*/
@PostMapping
(
"/logout"
)
public
JsonResult
logout
(
@RequestHeader
String
token
)
{
tokenService
.
invalidateToken
(
token
);
return
JsonResult
.
buildSuccessResult
(
"登出成功!"
,
true
);
}
/**
* 获取用户信息
* @return
*/
@GetMapping
(
"/info"
)
public
JsonResult
getInfo
(
@RequestHeader
String
token
)
{
UserInfoVo
userInfoVo
=
tokenService
.
getUserInfoFromCache
(
token
);
return
JsonResult
.
buildSuccessResult
(
userInfoVo
);
}
/**
* 获取用户信息列表
* @param pageNum 第几页
* @param pageSize 每页多少个
* @return
*/
@GetMapping
(
"/list"
)
public
JsonResult
getUserList
(
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
)
{
IPage
<
UserRole
>
userIPage
=
userService
.
getUserInfoList
(
pageNum
,
pageSize
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"total"
,
userIPage
.
getTotal
());
map
.
put
(
"list"
,
userIPage
.
getRecords
());
return
JsonResult
.
buildSuccessResult
(
map
);
}
}
src/main/java/cn/qg/holmes/controller/auth/UserRoleController.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auth
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
cn.qg.holmes.service.auth.UserRoleService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.CrossOrigin
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@CrossOrigin
@RestController
@RequestMapping
(
"/user/role"
)
public
class
UserRoleController
{
@Autowired
UserRoleService
userRoleService
;
/**
* 用户新增角色
* @param userId 用户id
* @param roleId 角色id
* @return
*/
@RequiresPermissions
(
"user:role:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addUserRole
(
Integer
userId
,
Integer
roleId
)
{
QueryWrapper
<
UserRole
>
userRoleQueryWrapper
=
new
QueryWrapper
<>();
userRoleQueryWrapper
.
eq
(
"user_id"
,
userId
);
userRoleQueryWrapper
.
eq
(
"role_id"
,
roleId
);
if
(
userRoleService
.
getOne
(
userRoleQueryWrapper
)
!=
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"用户角色已存在!"
,
false
);
}
userRoleQueryWrapper
.
clear
();
userRoleQueryWrapper
.
eq
(
"user_id"
,
userId
);
UserRole
userRole
=
userRoleService
.
getOne
(
userRoleQueryWrapper
);
if
(
userRole
==
null
)
{
UserRole
newUserRole
=
new
UserRole
();
newUserRole
.
setUserId
(
userId
);
newUserRole
.
setRoleId
(
roleId
);
return
JsonResult
.
buildSuccessResult
(
userRoleService
.
save
(
newUserRole
));
}
else
{
userRole
.
setRoleId
(
roleId
);
return
JsonResult
.
buildSuccessResult
(
userRoleService
.
saveOrUpdate
(
userRole
));
}
}
/**
* 编辑用户角色权限
* @param userRole 用户角色实体
* @return
*/
@RequiresPermissions
(
"user:role:edit"
)
@PostMapping
(
"/edit"
)
public
JsonResult
editUserRole
(
UserRole
userRole
)
{
return
JsonResult
.
buildSuccessResult
(
userRoleService
.
updateById
(
userRole
));
}
}
src/main/java/cn/qg/holmes/controller/auto/AutoModuleController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auto
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auto.AutoModule
;
import
cn.qg.holmes.service.auto.AutoModuleService
;
import
cn.qg.holmes.service.auto.AutoProjectService
;
...
...
@@ -48,6 +49,7 @@ public class AutoModuleController {
* @param autoModule AutoModule实体类
* @return
*/
@RequiresPermissions
(
"auto:module:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addAutoModule
(
@RequestBody
AutoModule
autoModule
)
{
QueryWrapper
<
AutoModule
>
queryWrapper
=
new
QueryWrapper
<>();
...
...
@@ -66,6 +68,7 @@ public class AutoModuleController {
* @param autoModule AutoModule实体类
* @return
*/
@RequiresPermissions
(
"auto:module:edit"
)
@PostMapping
(
"/modify"
)
public
JsonResult
editAutoModule
(
@RequestBody
AutoModule
autoModule
)
{
QueryWrapper
<
AutoModule
>
queryWrapper
=
new
QueryWrapper
<>();
...
...
@@ -80,10 +83,11 @@ public class AutoModuleController {
}
}
/**
/**
`
* 删除模块
* @param moduleId 模块id
*/
@RequiresPermissions
(
"auto:module:del"
)
@GetMapping
(
"/delete"
)
public
JsonResult
deleteAutoModule
(
@RequestParam
Integer
moduleId
)
{
if
(
autoModuleService
.
getById
(
moduleId
)
==
null
)
{
...
...
src/main/java/cn/qg/holmes/controller/auto/AutoProjectController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auto
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auto.AutoProject
;
import
cn.qg.holmes.service.auto.AutoProjectService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
...
...
@@ -45,6 +46,7 @@ public class AutoProjectController {
* @param autoProject 项目实体
* @return
*/
@RequiresPermissions
(
"auto:project:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
autoProjectAdd
(
@RequestBody
AutoProject
autoProject
)
{
// 判断项目是否已存在
...
...
@@ -62,6 +64,7 @@ public class AutoProjectController {
* @param autoProject 项目实体
* @return
*/
@RequiresPermissions
(
"auto:project:edit"
)
@PostMapping
(
"/modify"
)
public
JsonResult
autoProjectModify
(
@RequestBody
AutoProject
autoProject
)
{
if
(
autoProjectService
.
getById
(
autoProject
.
getId
())
==
null
)
{
...
...
@@ -75,6 +78,7 @@ public class AutoProjectController {
* 删除项目
* @param projectId 项目id
*/
@RequiresPermissions
(
"auto:project:del"
)
@GetMapping
(
"/delete"
)
public
JsonResult
autoProjectDelete
(
@RequestParam
Integer
projectId
)
{
if
(
autoProjectService
.
getById
(
projectId
)
==
null
)
{
...
...
src/main/java/cn/qg/holmes/controller/auto/InterfaceController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auto
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auto.Interface
;
import
cn.qg.holmes.service.auto.AutoModuleService
;
import
cn.qg.holmes.service.auto.InterfaceService
;
...
...
@@ -70,6 +71,7 @@ public class InterfaceController {
* @param interfaceEntity 接口类实体
* @return
*/
@RequiresPermissions
(
"auto:interface:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addInterface
(
@RequestBody
Interface
interfaceEntity
)
{
QueryWrapper
<
Interface
>
queryWrapper
=
new
QueryWrapper
<>();
...
...
@@ -90,6 +92,7 @@ public class InterfaceController {
* @param interfaceEntity 接口实体类
* @return
*/
@RequiresPermissions
(
"auto:interface:edit"
)
@PostMapping
(
"/modify"
)
public
JsonResult
modifyInterface
(
@RequestBody
Interface
interfaceEntity
)
{
if
(
interfaceService
.
getById
(
interfaceEntity
.
getId
())
==
null
)
{
...
...
@@ -103,6 +106,7 @@ public class InterfaceController {
* @param interfaceId 接口id
* @return
*/
@RequiresPermissions
(
"auto:interface:del"
)
@GetMapping
(
"/delete"
)
public
JsonResult
deleteInterface
(
@RequestParam
Integer
interfaceId
)
{
if
(
interfaceService
.
getById
(
interfaceId
)
==
null
)
{
...
...
src/main/java/cn/qg/holmes/controller/auto/SceneController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auto
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auto.Scene
;
import
cn.qg.holmes.service.auto.AutoProjectService
;
import
cn.qg.holmes.service.auto.SceneService
;
...
...
@@ -52,6 +53,7 @@ public class SceneController {
* @param scene 场景实体
* @return
*/
@RequiresPermissions
(
"auto:scene:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addScene
(
@RequestBody
Scene
scene
)
{
if
(
scene
.
getProjectId
()
==
null
)
{
...
...
@@ -71,6 +73,7 @@ public class SceneController {
* @param scene 场景实体
* @return
*/
@RequiresPermissions
(
"auto:scene:edit"
)
@PostMapping
(
"/modify"
)
public
JsonResult
modifyScene
(
@RequestBody
Scene
scene
)
{
if
(
scene
.
getId
()
==
null
)
{
...
...
@@ -87,6 +90,7 @@ public class SceneController {
* @param sceneId 场景id
* @return
*/
@RequiresPermissions
(
"auto:scene:del"
)
@GetMapping
(
"/delete"
)
public
JsonResult
deleteScene
(
Integer
sceneId
)
{
if
(
sceneService
.
getById
(
sceneId
)
==
null
)
{
...
...
src/main/java/cn/qg/holmes/controller/auto/TestcaseController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
auto
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auto.Interface
;
import
cn.qg.holmes.entity.auto.Testcase
;
import
cn.qg.holmes.service.auto.InterfaceService
;
...
...
@@ -71,6 +72,7 @@ public class TestcaseController {
* @param testcase
* @return
*/
@RequiresPermissions
(
"auto:testcase:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addTestcase
(
@RequestBody
Testcase
testcase
)
{
if
(
testcase
.
getName
()
==
null
||
testcase
.
getInterfaceId
()
==
null
||
testcase
.
getModuleId
()
==
null
)
{
...
...
@@ -85,6 +87,7 @@ public class TestcaseController {
* @param testcase 单接口用例实体
* @return
*/
@RequiresPermissions
(
"auto:testcase:edit"
)
@PostMapping
(
"/modify"
)
public
JsonResult
modifyTestcase
(
@RequestBody
Testcase
testcase
)
{
if
(
testcase
.
getId
()
==
null
)
{
...
...
@@ -99,6 +102,7 @@ public class TestcaseController {
* @param testcaseId 用例id
* @return
*/
@RequiresPermissions
(
"auto:testcase:del"
)
@GetMapping
(
"/delete"
)
public
JsonResult
deleteTestcase
(
@RequestParam
Integer
testcaseId
)
{
if
(
testcaseService
.
getById
(
testcaseId
)
==
null
)
{
...
...
src/main/java/cn/qg/holmes/controller/gitlab/PipelineController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
gitlab
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.gitlab.DingRobotPipelineVo
;
import
cn.qg.holmes.entity.gitlab.Pipeline
;
import
cn.qg.holmes.entity.jira.DingRobot
;
...
...
@@ -81,6 +82,7 @@ public class PipelineController {
* 新增ding robot 以及对应的pipeline
* @return
*/
@RequiresPermissions
(
"qa:process:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addRobotAndPipeline
(
@RequestBody
DingRobotPipelineVo
dingRobotPipelineVo
)
{
try
{
...
...
@@ -121,6 +123,7 @@ public class PipelineController {
* @param dingRobotPipelineVo
* @return
*/
@RequiresPermissions
(
"qa:process:edit"
)
@PostMapping
(
"/modify"
)
public
JsonResult
modifyPipeline
(
@RequestBody
DingRobotPipelineVo
dingRobotPipelineVo
)
{
try
{
...
...
@@ -172,6 +175,7 @@ public class PipelineController {
* @param dingRobotId
* @return
*/
@RequiresPermissions
(
"qa:process:del"
)
@GetMapping
(
"/delete"
)
public
JsonResult
deletePipeline
(
@RequestParam
Integer
dingRobotId
)
{
try
{
...
...
src/main/java/cn/qg/holmes/controller/jira/JiraController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
jira
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.jira.DingRobot
;
import
cn.qg.holmes.entity.jira.SendScheduleVo
;
import
cn.qg.holmes.entity.jira.SendSmokingResultVo
;
...
...
@@ -154,6 +155,7 @@ public class JiraController {
* @return
* @throws Exception
*/
@RequiresPermissions
(
"qa:process:schedule"
)
@PostMapping
(
"/send/schedule"
)
public
JsonResult
sendTestReport
(
@RequestBody
SendScheduleVo
sendScheduleVo
)
throws
Exception
{
String
JQL
=
"project = "
+
sendScheduleVo
.
getJiraProjectKey
()
+
" AND resolution = Unresolved AND text ~ \""
+
sendScheduleVo
.
getTestProjectName
()
+
"\" ORDER BY priority DESC, updated DESC"
;
...
...
@@ -167,6 +169,7 @@ public class JiraController {
* @param sendSmokingResultVo 发送冒烟进度实体
* @return
*/
@RequiresPermissions
(
"qa:process:smoke"
)
@PostMapping
(
"/send/smoking"
)
public
JsonResult
sendSmokingResult
(
@RequestBody
SendSmokingResultVo
sendSmokingResultVo
)
throws
Exception
{
String
JQL
=
"project = "
+
sendSmokingResultVo
.
getJiraProjectKey
()
+
" AND resolution = Unresolved AND text ~ \""
...
...
src/main/java/cn/qg/holmes/controller/mock/MockController.java
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
controller
.
mock
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.mock.Mock
;
import
cn.qg.holmes.entity.mock.MockModule
;
import
cn.qg.holmes.service.mock.MockModuleService
;
...
...
@@ -33,6 +34,7 @@ public class MockController {
@RequestMapping
(
value
=
"/mock/**"
,
method
=
{
RequestMethod
.
GET
,
RequestMethod
.
POST
})
public
void
mockMethod
()
{}
@RequiresPermissions
(
"mock:add"
)
@PostMapping
(
"/add/mock"
)
public
JsonResult
addMock
(
@RequestBody
Mock
mock
)
{
return
JsonResult
.
buildSuccessResult
(
mockService
.
save
(
mock
));
...
...
@@ -55,6 +57,7 @@ public class MockController {
return
JsonResult
.
buildSuccessResult
(
map
);
}
@RequiresPermissions
(
"mock:edit"
)
@PostMapping
(
"/edit/mock"
)
public
JsonResult
modifyMock
(
@RequestBody
Mock
mock
)
{
return
JsonResult
.
buildSuccessResult
(
mockService
.
saveOrUpdate
(
mock
));
...
...
src/main/java/cn/qg/holmes/entity/auth/LoginVo.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
lombok.Data
;
/**
* 登录参数类
*/
@Data
public
class
LoginVo
{
private
String
username
;
private
String
password
;
}
src/main/java/cn/qg/holmes/entity/auth/Permission.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
Permission
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
private
String
menuCode
;
private
String
menuName
;
private
String
permissionName
;
private
String
permissionCode
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/entity/auth/Role.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
Role
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
private
String
roleName
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/entity/auth/RolePermission.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
RolePermission
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
private
Integer
roleId
;
private
Integer
permissionId
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/entity/auth/RolePermissionVo.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
RolePermissionVo
{
private
Integer
roleId
;
private
String
roleName
;
private
List
<
Integer
>
permissionIdList
;
}
src/main/java/cn/qg/holmes/entity/auth/User.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
User
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
private
String
username
;
private
String
chineseName
;
private
String
email
;
private
String
title
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
@TableField
(
exist
=
false
)
private
Integer
roleId
;
@TableField
(
exist
=
false
)
private
String
roleName
;
}
src/main/java/cn/qg/holmes/entity/auth/UserInfoVo.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
lombok.Data
;
import
java.util.List
;
import
java.util.Set
;
@Data
public
class
UserInfoVo
{
private
Integer
userId
;
private
String
username
;
private
String
chineseName
;
private
String
email
;
private
String
title
;
private
List
<
Integer
>
roleIds
;
private
Set
<
String
>
menuList
;
private
Set
<
String
>
permissionCodeList
;
}
src/main/java/cn/qg/holmes/entity/auth/UserRole.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
entity
.
auth
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
UserRole
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
private
Integer
userId
;
private
Integer
roleId
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
@TableField
(
exist
=
false
)
private
String
userName
;
@TableField
(
exist
=
false
)
private
String
chineseName
;
@TableField
(
exist
=
false
)
private
String
email
;
@TableField
(
exist
=
false
)
private
String
title
;
@TableField
(
exist
=
false
)
private
String
roleName
;
}
src/main/java/cn/qg/holmes/exception/TokenInvalidException.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
exception
;
public
class
TokenInvalidException
extends
RuntimeException
{
public
TokenInvalidException
()
{
super
(
"Token已失效!"
);
}
}
src/main/java/cn/qg/holmes/exception/UnauthorizedException.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
exception
;
public
class
UnauthorizedException
extends
RuntimeException
{
public
UnauthorizedException
()
{
super
(
"用户无此接口权限"
);
}
}
src/main/java/cn/qg/holmes/mapper/auth/PermissionMapper.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
mapper
.
auth
;
import
cn.qg.holmes.entity.auth.Permission
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
PermissionMapper
extends
BaseMapper
<
Permission
>
{
}
src/main/java/cn/qg/holmes/mapper/auth/RoleMapper.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
mapper
.
auth
;
import
cn.qg.holmes.entity.auth.Role
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
RoleMapper
extends
BaseMapper
<
Role
>
{
}
src/main/java/cn/qg/holmes/mapper/auth/RolePermissionMapper.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
mapper
.
auth
;
import
cn.qg.holmes.entity.auth.RolePermission
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
RolePermissionMapper
extends
BaseMapper
<
RolePermission
>
{
}
src/main/java/cn/qg/holmes/mapper/auth/UserMapper.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
mapper
.
auth
;
import
cn.qg.holmes.entity.auth.User
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
java.util.Map
;
public
interface
UserMapper
extends
BaseMapper
<
User
>
{
IPage
<
UserRole
>
getUserInfoList
(
IPage
<
User
>
page
);
}
src/main/java/cn/qg/holmes/mapper/auth/UserRoleMapper.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
mapper
.
auth
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
UserRoleMapper
extends
BaseMapper
<
UserRole
>
{
}
src/main/java/cn/qg/holmes/service/auth/LdapService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
import
java.util.Map
;
public
interface
LdapService
{
boolean
authenticate
(
String
username
,
String
password
);
Map
<
String
,
String
>
getUserInfo
();
}
src/main/java/cn/qg/holmes/service/auth/LoginService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
public
interface
LoginService
{
boolean
login
(
String
username
,
String
password
);
}
src/main/java/cn/qg/holmes/service/auth/PermissionService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
import
cn.qg.holmes.entity.auth.Permission
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
import
java.util.Map
;
public
interface
PermissionService
extends
IService
<
Permission
>{
List
<
Map
<
String
,
Object
>>
getPermissionList
();
}
src/main/java/cn/qg/holmes/service/auth/RolePermissionService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
import
cn.qg.holmes.entity.auth.RolePermission
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
import
java.util.Set
;
public
interface
RolePermissionService
extends
IService
<
RolePermission
>
{
Set
<
String
>
getPermissionSetForRoleIds
(
List
<
Integer
>
roleIds
);
Set
<
String
>
getMenuSetForRoleIds
(
List
<
Integer
>
roleIds
);
}
src/main/java/cn/qg/holmes/service/auth/RoleService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
import
cn.qg.holmes.entity.auth.Role
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
RoleService
extends
IService
<
Role
>
{
}
src/main/java/cn/qg/holmes/service/auth/TokenService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
import
cn.qg.holmes.entity.auth.UserInfoVo
;
public
interface
TokenService
{
String
generateToken
(
Integer
userId
);
UserInfoVo
getUserInfoFromCache
(
String
token
);
void
invalidateToken
(
String
token
);
}
src/main/java/cn/qg/holmes/service/auth/UserRoleService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
public
interface
UserRoleService
extends
IService
<
UserRole
>
{
List
<
Integer
>
getRoleIdsByUserId
(
Integer
userId
);
}
src/main/java/cn/qg/holmes/service/auth/UserService.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
;
import
cn.qg.holmes.entity.auth.User
;
import
cn.qg.holmes.entity.auth.UserInfoVo
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
UserService
extends
IService
<
User
>
{
User
getUserByUsername
(
String
username
);
UserInfoVo
getUserInfoByUsername
(
String
username
);
IPage
<
UserRole
>
getUserInfoList
(
Integer
pageNum
,
Integer
pageSize
);
}
src/main/java/cn/qg/holmes/service/auth/impl/LdapServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.service.auth.LdapService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.stereotype.Service
;
import
javax.naming.AuthenticationException
;
import
javax.naming.Context
;
import
javax.naming.NamingEnumeration
;
import
javax.naming.NamingException
;
import
javax.naming.directory.SearchControls
;
import
javax.naming.directory.SearchResult
;
import
javax.naming.ldap.Control
;
import
javax.naming.ldap.InitialLdapContext
;
import
javax.naming.ldap.LdapContext
;
import
java.util.HashMap
;
import
java.util.Hashtable
;
import
java.util.Map
;
@Slf4j
@Service
public
class
LdapServiceImpl
implements
LdapService
,
CommandLineRunner
{
private
LdapContext
ctx
=
null
;
private
final
Control
[]
connCtls
=
null
;
private
Map
<
String
,
String
>
userInfoMap
=
new
HashMap
<>();
private
final
String
BASEDN
=
"ou=北京量科邦信息技术有限公司,dc=quantgroup,dc=cn"
;
private
final
String
URL
=
"ldap://ldap.quantgroups.com:389/"
;
private
final
String
password
=
"Quantgroup.com@2o17"
;
private
final
String
username
=
"cn=common_auth_query,cn=users,DC=quantgroup,DC=cn"
;
private
void
ldapConnect
()
{
Hashtable
<
String
,
String
>
env
=
new
Hashtable
<>();
env
.
put
(
Context
.
INITIAL_CONTEXT_FACTORY
,
"com.sun.jndi.ldap.LdapCtxFactory"
);
env
.
put
(
Context
.
PROVIDER_URL
,
URL
+
BASEDN
);
env
.
put
(
Context
.
SECURITY_AUTHENTICATION
,
"simple"
);
env
.
put
(
Context
.
SECURITY_PRINCIPAL
,
username
);
env
.
put
(
Context
.
SECURITY_CREDENTIALS
,
password
);
// 此处若不指定用户名和密码,则自动转换为匿名登录
try
{
ctx
=
new
InitialLdapContext
(
env
,
connCtls
);
}
catch
(
Exception
e
)
{
log
.
error
(
"初始化失败:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
}
}
private
String
getUserDN
(
String
username
)
{
String
userDN
=
""
;
ldapConnect
();
try
{
SearchControls
constraints
=
new
SearchControls
();
constraints
.
setSearchScope
(
SearchControls
.
SUBTREE_SCOPE
);
String
email
=
username
.
endsWith
(
"@quantgroup.cn"
)
?
username
:
username
+
"@quantgroup.cn"
;
NamingEnumeration
<
SearchResult
>
en
=
ctx
.
search
(
""
,
"mail="
+
email
,
constraints
);
if
(
en
==
null
||
!
en
.
hasMoreElements
())
{
log
.
info
(
"未找到该用户,uid={}"
,
username
);
}
// maybe more than one element
while
(
en
!=
null
&&
en
.
hasMoreElements
())
{
Object
obj
=
en
.
nextElement
();
if
(
obj
instanceof
SearchResult
)
{
SearchResult
si
=
(
SearchResult
)
obj
;
userDN
+=
si
.
getName
();
userDN
+=
","
+
BASEDN
;
userInfoMap
.
put
(
"userDN"
,
userDN
);
userInfoMap
.
put
(
"chineseName"
,
si
.
getAttributes
().
get
(
"name"
).
get
().
toString
());
userInfoMap
.
put
(
"email"
,
email
);
userInfoMap
.
put
(
"title"
,
si
.
getAttributes
().
get
(
"title"
).
get
().
toString
());
}
else
{
System
.
out
.
println
(
obj
);
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"异常:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
e
.
printStackTrace
();
}
return
userDN
;
}
@Override
public
boolean
authenticate
(
String
username
,
String
password
)
{
boolean
validate
;
String
userDN
=
getUserDN
(
username
);
try
{
ctx
.
addToEnvironment
(
Context
.
SECURITY_PRINCIPAL
,
userDN
);
ctx
.
addToEnvironment
(
Context
.
SECURITY_CREDENTIALS
,
password
);
ctx
.
reconnect
(
connCtls
);
log
.
info
(
"验证通过,uid={}"
,
username
);
validate
=
true
;
}
catch
(
AuthenticationException
e
)
{
log
.
error
(
"异常:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
System
.
out
.
println
(
e
.
toString
());
validate
=
false
;
}
catch
(
NamingException
e
)
{
log
.
error
(
"异常:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
validate
=
false
;
}
return
validate
;
}
@Override
public
Map
<
String
,
String
>
getUserInfo
()
{
return
userInfoMap
;
}
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
ldapConnect
();
}
}
src/main/java/cn/qg/holmes/service/auth/impl/LoginServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.entity.auth.User
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
cn.qg.holmes.service.auth.LdapService
;
import
cn.qg.holmes.service.auth.LoginService
;
import
cn.qg.holmes.service.auth.UserRoleService
;
import
cn.qg.holmes.service.auth.UserService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.DigestUtils
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Map
;
@Slf4j
@Service
public
class
LoginServiceImpl
implements
LoginService
{
@Autowired
LdapService
ldapService
;
@Autowired
UserService
userService
;
@Autowired
UserRoleService
userRoleService
;
@Override
public
boolean
login
(
String
username
,
String
password
)
{
boolean
result
=
ldapService
.
authenticate
(
username
,
password
);
log
.
info
(
"登录结果为:{}"
,
result
);
if
(
result
)
{
Map
<
String
,
String
>
userInfo
=
ldapService
.
getUserInfo
();
User
user
=
userService
.
getUserByUsername
(
username
);
// 用户不存在,则创建新用户
if
(
user
==
null
)
{
User
newUser
=
new
User
();
newUser
.
setUsername
(
username
);
newUser
.
setChineseName
(
userInfo
.
get
(
"chineseName"
));
newUser
.
setEmail
(
userInfo
.
get
(
"email"
));
newUser
.
setTitle
(
userInfo
.
get
(
"title"
));
userService
.
save
(
newUser
);
// 默认赋予一个权限,权限id在代码里写死
user
=
userService
.
getUserByUsername
(
username
);
UserRole
userRole
=
new
UserRole
();
userRole
.
setUserId
(
user
.
getId
());
if
(
userInfo
.
get
(
"title"
).
startsWith
(
"测试"
))
{
userRole
.
setRoleId
(
2
);
}
else
{
userRole
.
setRoleId
(
3
);
}
userRoleService
.
save
(
userRole
);
}
}
return
result
;
}
}
src/main/java/cn/qg/holmes/service/auth/impl/PermissionServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.entity.auth.Permission
;
import
cn.qg.holmes.mapper.auth.PermissionMapper
;
import
cn.qg.holmes.service.auth.PermissionService
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
PermissionServiceImpl
extends
ServiceImpl
<
PermissionMapper
,
Permission
>
implements
PermissionService
{
@Autowired
PermissionMapper
permissionMapper
;
@Override
public
List
<
Map
<
String
,
Object
>>
getPermissionList
()
{
List
<
Map
<
String
,
Object
>>
result
=
new
ArrayList
<>();
QueryWrapper
<
Permission
>
permissionQueryWrapper
=
new
QueryWrapper
<>();
permissionQueryWrapper
.
select
(
"DISTINCT menu_name"
);
List
<
Permission
>
permissionList
=
permissionMapper
.
selectList
(
permissionQueryWrapper
);
List
<
String
>
menuNameList
=
new
ArrayList
<>();
permissionList
.
forEach
(
permission
->
{
menuNameList
.
add
(
permission
.
getMenuName
());
});
permissionQueryWrapper
.
clear
();
for
(
String
menuName:
menuNameList
)
{
permissionQueryWrapper
.
eq
(
"menu_name"
,
menuName
);
List
<
Permission
>
permissions
=
permissionMapper
.
selectList
(
permissionQueryWrapper
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
List
<
Map
<
String
,
Object
>>
tempPermissionList
=
new
ArrayList
<>();
permissions
.
forEach
(
permission
->
{
Map
<
String
,
Object
>
map2
=
new
HashMap
<>();
map2
.
put
(
"id"
,
permission
.
getId
());
map2
.
put
(
"permissionName"
,
permission
.
getPermissionName
());
tempPermissionList
.
add
(
map2
);
});
map
.
put
(
"menuName"
,
menuName
);
map
.
put
(
"permissionList"
,
tempPermissionList
);
result
.
add
(
map
);
permissionQueryWrapper
.
clear
();
}
return
result
;
}
}
src/main/java/cn/qg/holmes/service/auth/impl/RolePermissionServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.entity.auth.RolePermission
;
import
cn.qg.holmes.mapper.auth.PermissionMapper
;
import
cn.qg.holmes.mapper.auth.RolePermissionMapper
;
import
cn.qg.holmes.service.auth.RolePermissionService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
@Service
public
class
RolePermissionServiceImpl
extends
ServiceImpl
<
RolePermissionMapper
,
RolePermission
>
implements
RolePermissionService
{
@Autowired
RolePermissionMapper
rolePermissionMapper
;
@Autowired
PermissionMapper
permissionMapper
;
@Override
public
Set
<
String
>
getPermissionSetForRoleIds
(
List
<
Integer
>
roleIds
)
{
Set
<
String
>
permissionCodeSet
=
new
HashSet
<>();
for
(
Integer
roleId:
roleIds
)
{
QueryWrapper
<
RolePermission
>
rolePermissionQueryWrapper
=
new
QueryWrapper
<>();
rolePermissionQueryWrapper
.
eq
(
"role_id"
,
roleId
);
List
<
RolePermission
>
rolePermissionList
=
rolePermissionMapper
.
selectList
(
rolePermissionQueryWrapper
);
rolePermissionList
.
forEach
(
rolePermission
->
{
permissionCodeSet
.
add
(
permissionMapper
.
selectById
(
rolePermission
.
getPermissionId
()).
getPermissionCode
());
});
}
return
permissionCodeSet
;
}
@Override
public
Set
<
String
>
getMenuSetForRoleIds
(
List
<
Integer
>
roleIds
)
{
Set
<
String
>
menuCodeSet
=
new
HashSet
<>();
for
(
Integer
roleId:
roleIds
)
{
QueryWrapper
<
RolePermission
>
rolePermissionQueryWrapper
=
new
QueryWrapper
<>();
rolePermissionQueryWrapper
.
eq
(
"role_id"
,
roleId
);
List
<
RolePermission
>
rolePermissionList
=
rolePermissionMapper
.
selectList
(
rolePermissionQueryWrapper
);
rolePermissionList
.
forEach
(
rolePermission
->
{
menuCodeSet
.
add
(
permissionMapper
.
selectById
(
rolePermission
.
getPermissionId
()).
getMenuCode
());
});
}
return
menuCodeSet
;
}
}
src/main/java/cn/qg/holmes/service/auth/impl/RoleServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.entity.auth.Role
;
import
cn.qg.holmes.mapper.auth.RoleMapper
;
import
cn.qg.holmes.service.auth.RoleService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
@Service
public
class
RoleServiceImpl
extends
ServiceImpl
<
RoleMapper
,
Role
>
implements
RoleService
{
}
src/main/java/cn/qg/holmes/service/auth/impl/TokenServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.entity.auth.User
;
import
cn.qg.holmes.entity.auth.UserInfoVo
;
import
cn.qg.holmes.exception.TokenInvalidException
;
import
cn.qg.holmes.mapper.auth.UserMapper
;
import
cn.qg.holmes.service.auth.TokenService
;
import
cn.qg.holmes.service.auth.UserService
;
import
cn.qg.holmes.utils.RedisUtils
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
@Slf4j
@Service
public
class
TokenServiceImpl
implements
TokenService
{
private
final
String
TOKEN_PREFIX
=
"user:token:"
;
@Autowired
RedisUtils
redisUtils
;
@Autowired
UserMapper
userMapper
;
@Autowired
UserService
userService
;
/**
* 生成token并存放到redis
* @param userId 用户id
* @return
*/
@Override
public
String
generateToken
(
Integer
userId
)
{
String
token
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
).
substring
(
0
,
20
);
User
user
=
userMapper
.
selectById
(
userId
);
UserInfoVo
userInfoVo
=
userService
.
getUserInfoByUsername
(
user
.
getUsername
());
//设置用户信息缓存
redisUtils
.
set
(
TOKEN_PREFIX
+
token
,
userInfoVo
);
return
token
;
}
/**
* 根据token从redis获取用户信息
* @param token 用户token
* @return
*/
@Override
public
UserInfoVo
getUserInfoFromCache
(
String
token
)
{
if
(
StringUtils
.
isEmpty
(
token
))
{
throw
new
TokenInvalidException
();
}
if
(!
redisUtils
.
hasKey
(
TOKEN_PREFIX
+
token
))
{
throw
new
TokenInvalidException
();
}
UserInfoVo
userInfoVo
=
new
UserInfoVo
();
Map
redisValue
=
(
Map
)
redisUtils
.
get
(
TOKEN_PREFIX
+
token
);
userInfoVo
.
setUserId
((
Integer
)
redisValue
.
get
(
"userId"
));
userInfoVo
.
setUsername
(
redisValue
.
get
(
"username"
).
toString
());
userInfoVo
.
setChineseName
(
redisValue
.
get
(
"chineseName"
).
toString
());
userInfoVo
.
setEmail
(
redisValue
.
get
(
"email"
).
toString
());
userInfoVo
.
setTitle
(
redisValue
.
get
(
"title"
).
toString
());
userInfoVo
.
setRoleIds
((
List
<
Integer
>)
redisValue
.
get
(
"roleIds"
));
Set
<
String
>
permissionCodeSet
=
new
HashSet
<>();
List
<
String
>
permissionCodeList
=
(
List
<
String
>)
redisValue
.
get
(
"permissionCodeList"
);
permissionCodeList
.
forEach
(
permissionCode
->
{
permissionCodeSet
.
add
(
permissionCode
);
});
Set
<
String
>
menuSet
=
new
HashSet
<>();
List
<
String
>
menuList
=
(
List
<
String
>)
redisValue
.
get
(
"menuList"
);
menuList
.
forEach
(
menu
->
{
menuSet
.
add
(
menu
);
});
userInfoVo
.
setPermissionCodeList
(
permissionCodeSet
);
userInfoVo
.
setMenuList
(
menuSet
);
return
userInfoVo
;
}
/**
* 删除redis里保存的token
* @param token
*/
@Override
public
void
invalidateToken
(
String
token
)
{
if
(!
redisUtils
.
hasKey
(
TOKEN_PREFIX
+
token
))
{
throw
new
TokenInvalidException
();
}
redisUtils
.
del
(
TOKEN_PREFIX
+
token
);
}
}
src/main/java/cn/qg/holmes/service/auth/impl/UserRoleServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
cn.qg.holmes.mapper.auth.UserRoleMapper
;
import
cn.qg.holmes.service.auth.UserRoleService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
@Service
public
class
UserRoleServiceImpl
extends
ServiceImpl
<
UserRoleMapper
,
UserRole
>
implements
UserRoleService
{
@Autowired
UserRoleMapper
userRoleMapper
;
@Override
public
List
<
Integer
>
getRoleIdsByUserId
(
Integer
userId
)
{
QueryWrapper
<
UserRole
>
userRoleQueryWrapper
=
new
QueryWrapper
<>();
userRoleQueryWrapper
.
eq
(
"user_id"
,
userId
);
List
<
UserRole
>
userRoleList
=
userRoleMapper
.
selectList
(
userRoleQueryWrapper
);
List
<
Integer
>
roleIds
=
new
ArrayList
<>();
userRoleList
.
forEach
(
userRole
->
{
roleIds
.
add
(
userRole
.
getRoleId
());
});
return
roleIds
;
}
}
src/main/java/cn/qg/holmes/service/auth/impl/UserServiceImpl.java
0 → 100644
View file @
e6a3713d
package
cn
.
qg
.
holmes
.
service
.
auth
.
impl
;
import
cn.qg.holmes.entity.auth.User
;
import
cn.qg.holmes.entity.auth.UserInfoVo
;
import
cn.qg.holmes.entity.auth.UserRole
;
import
cn.qg.holmes.mapper.auth.UserMapper
;
import
cn.qg.holmes.service.auth.RolePermissionService
;
import
cn.qg.holmes.service.auth.UserRoleService
;
import
cn.qg.holmes.service.auth.UserService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Set
;
@Service
public
class
UserServiceImpl
extends
ServiceImpl
<
UserMapper
,
User
>
implements
UserService
{
@Autowired
UserMapper
userMapper
;
@Autowired
UserRoleService
userRoleService
;
@Autowired
RolePermissionService
rolePermissionService
;
@Override
public
User
getUserByUsername
(
String
username
)
{
QueryWrapper
<
User
>
userQueryWrapper
=
new
QueryWrapper
<>();
userQueryWrapper
.
eq
(
"username"
,
username
);
return
userMapper
.
selectOne
(
userQueryWrapper
);
}
/**
* 根据用户名获取用户信息
* @param username
* @return
*/
@Override
public
UserInfoVo
getUserInfoByUsername
(
String
username
)
{
UserInfoVo
userInfoVo
=
new
UserInfoVo
();
userInfoVo
.
setUsername
(
username
);
QueryWrapper
<
User
>
userQueryWrapper
=
new
QueryWrapper
<>();
userQueryWrapper
.
eq
(
"username"
,
username
);
User
user
=
userMapper
.
selectOne
(
userQueryWrapper
);
userInfoVo
.
setUserId
(
user
.
getId
());
userInfoVo
.
setChineseName
(
user
.
getChineseName
());
userInfoVo
.
setEmail
(
user
.
getEmail
());
userInfoVo
.
setTitle
(
user
.
getTitle
());
List
<
Integer
>
roleIds
=
userRoleService
.
getRoleIdsByUserId
(
user
.
getId
());
userInfoVo
.
setRoleIds
(
roleIds
);
Set
<
String
>
permissionCodeSet
=
rolePermissionService
.
getPermissionSetForRoleIds
(
roleIds
);
userInfoVo
.
setPermissionCodeList
(
permissionCodeSet
);
Set
<
String
>
menuCodeSet
=
rolePermissionService
.
getMenuSetForRoleIds
(
roleIds
);
userInfoVo
.
setMenuList
(
menuCodeSet
);
return
userInfoVo
;
}
/**
* 获取用户信息列表
* @param pageNum
* @param pageSize
* @return
*/
@Override
public
IPage
<
UserRole
>
getUserInfoList
(
Integer
pageNum
,
Integer
pageSize
)
{
IPage
<
User
>
page
=
new
Page
<>(
pageNum
,
pageSize
);
return
userMapper
.
getUserInfoList
(
page
);
}
}
src/main/resources/mapper/auth/UserMapper.xml
0 → 100644
View file @
e6a3713d
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"cn.qg.holmes.mapper.auth.UserMapper"
>
<select
id=
"getUserInfoList"
resultType=
"cn.qg.holmes.entity.auth.UserRole"
>
SELECT ur.*,
u.`username` as userName,
u.`chinese_name` as chineseName,
u.`email` as `email`,
u.`title` as `title`,
r.`role_name` as roleName FROM `user` u
INNER JOIN `role` r
INNER JOIN `user_role` ur
ON u.`id` = ur.`user_id` AND r.`id` = ur.`role_id`
</select>
</mapper>
\ No newline at end of file
Write
Preview
Markdown
is supported
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