├── README.md
├── doc
└── premission.sql
├── pom.xml
└── src
└── main
├── java
└── com
│ └── sherlock
│ └── premssion
│ ├── PremssionApplication.java
│ ├── config
│ ├── ShiroConfig.java
│ └── UserRealm.java
│ ├── controller
│ ├── AnnoController.java
│ ├── SysRoleController.java
│ └── SysUserController.java
│ ├── enums
│ ├── ForbiddenEnum.java
│ └── REnum.java
│ ├── exception
│ ├── SystemException.java
│ └── SystemExceptionHandler.java
│ ├── from
│ ├── SysRoleFrom.java
│ └── SysUserFrom.java
│ ├── model
│ ├── SysResource.java
│ ├── SysRole.java
│ ├── SysRoleResource.java
│ ├── SysUser.java
│ └── SysUserRole.java
│ ├── repository
│ ├── SysResourceRepository.java
│ ├── SysRoleRepository.java
│ ├── SysRoleResourceRepository.java
│ ├── SysUserRepository.java
│ └── SysUserRoleRepository.java
│ ├── service
│ ├── SysResourceService.java
│ ├── SysRoleService.java
│ ├── SysUserService.java
│ └── impl
│ │ ├── SysResourceServiceImpl.java
│ │ ├── SysRoleServiceImpl.java
│ │ └── SysUserServiceImpl.java
│ ├── utils
│ ├── Assert.java
│ ├── JPAUtil.java
│ ├── RUtil.java
│ └── ShiroUtil.java
│ └── vo
│ ├── R.java
│ ├── SysRoleVo.java
│ └── SysUserVo.java
└── resources
├── application.yml
└── logback.xml
/README.md:
--------------------------------------------------------------------------------
1 | # SpringBoot+Shiro权限管理系统脚手架
2 | ## 项目说明:
3 |
项目基于Rest ful风格的接口开发,属于前后端分离,该项目属于后端部分,主要应用了Shiro框架,结合SpringBoot,基于对用户,角色,权限开发的权限系统脚手架
4 | ## 技术应用:
5 |
项目管理工具:Maven 3.3;
6 |
jdk:jdk1.8;
7 |
MVC框架:SpringMVC;
8 |
核心框架:SpringBoot;
9 |
ORM:Spring Data JPA;
10 |
安全框架:shiro;
11 |
Json:Jackson;
12 |
日志框架:logback+slf4j;
13 |
数据库:MySql 7.X;
14 | ## 在线接口文档:
15 |
https://www.showdoc.cc/web/#/45548998549228
16 |
--------------------------------------------------------------------------------
/doc/premission.sql:
--------------------------------------------------------------------------------
1 | /*
2 | Navicat MySQL Data Transfer
3 |
4 | Source Server : localhost_3306
5 | Source Server Version : 50721
6 | Source Host : localhost:3306
7 | Source Database : premission
8 |
9 | Target Server Type : MYSQL
10 | Target Server Version : 50721
11 | File Encoding : 65001
12 |
13 | Date: 2018-04-08 01:16:57
14 | */
15 |
16 | SET FOREIGN_KEY_CHECKS=0;
17 |
18 | -- ----------------------------
19 | -- Table structure for sys_resource
20 | -- ----------------------------
21 | DROP TABLE IF EXISTS `sys_resource`;
22 | CREATE TABLE `sys_resource` (
23 | `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
24 | `parent_id` int(32) DEFAULT NULL COMMENT '资源父ID',
25 | `name` varchar(64) NOT NULL COMMENT '资源名称',
26 | `perms` varchar(64) DEFAULT NULL COMMENT '权限标识符',
27 | `type` char(1) NOT NULL COMMENT '类型:0:目录,1:菜单,2:按钮',
28 | PRIMARY KEY (`id`)
29 | ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
30 |
31 | -- ----------------------------
32 | -- Records of sys_resource
33 | -- ----------------------------
34 | INSERT INTO `sys_resource` VALUES ('1', '0', '系统管理', null, '0');
35 | INSERT INTO `sys_resource` VALUES ('2', '1', '用户管理', 'sys:users', '1');
36 | INSERT INTO `sys_resource` VALUES ('3', '1', '角色管理', 'sys:roles', '1');
37 | INSERT INTO `sys_resource` VALUES ('4', '2', '添加用户', 'sys:user:insert', '2');
38 | INSERT INTO `sys_resource` VALUES ('5', '2', '删除用户', 'sys:user:delete', '2');
39 | INSERT INTO `sys_resource` VALUES ('6', '2', '修改用户', 'sys:user:update', '2');
40 | INSERT INTO `sys_resource` VALUES ('7', '2', '查询用户', 'sys:user:list', '2');
41 | INSERT INTO `sys_resource` VALUES ('8', '3', '添加角色', 'sys:role:insert', '2');
42 | INSERT INTO `sys_resource` VALUES ('9', '3', '删除角色', 'sys:role:delete', '2');
43 | INSERT INTO `sys_resource` VALUES ('10', '3', '修改角色', 'sys:role:update', '2');
44 | INSERT INTO `sys_resource` VALUES ('11', '3', '查询角色', 'sys:role:list', '2');
45 | INSERT INTO `sys_resource` VALUES ('12', '3', '角色详情', 'sys:role:detail', '2');
46 | INSERT INTO `sys_resource` VALUES ('13', '2', '用户详情', 'sys:user:detail', '2');
47 |
48 | -- ----------------------------
49 | -- Table structure for sys_role
50 | -- ----------------------------
51 | DROP TABLE IF EXISTS `sys_role`;
52 | CREATE TABLE `sys_role` (
53 | `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
54 | `name` varchar(64) NOT NULL COMMENT '角色名',
55 | `grade` tinyint(2) NOT NULL COMMENT '角色等级',
56 | `remark` varchar(256) DEFAULT NULL COMMENT '备注',
57 | PRIMARY KEY (`id`)
58 | ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
59 |
60 | -- ----------------------------
61 | -- Records of sys_role
62 | -- ----------------------------
63 | INSERT INTO `sys_role` VALUES ('7', '超级管理员', '1', '超级管理员,全站管理');
64 |
65 | -- ----------------------------
66 | -- Table structure for sys_role_resource
67 | -- ----------------------------
68 | DROP TABLE IF EXISTS `sys_role_resource`;
69 | CREATE TABLE `sys_role_resource` (
70 | `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
71 | `role_id` int(32) NOT NULL COMMENT '角色id',
72 | `resource_id` int(32) NOT NULL COMMENT '资源id',
73 | PRIMARY KEY (`id`)
74 | ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
75 |
76 | -- ----------------------------
77 | -- Records of sys_role_resource
78 | -- ----------------------------
79 | INSERT INTO `sys_role_resource` VALUES ('3', '7', '1');
80 | INSERT INTO `sys_role_resource` VALUES ('4', '7', '2');
81 | INSERT INTO `sys_role_resource` VALUES ('5', '7', '3');
82 | INSERT INTO `sys_role_resource` VALUES ('6', '7', '4');
83 | INSERT INTO `sys_role_resource` VALUES ('7', '7', '5');
84 | INSERT INTO `sys_role_resource` VALUES ('8', '7', '6');
85 | INSERT INTO `sys_role_resource` VALUES ('9', '7', '7');
86 | INSERT INTO `sys_role_resource` VALUES ('10', '7', '8');
87 | INSERT INTO `sys_role_resource` VALUES ('11', '7', '9');
88 | INSERT INTO `sys_role_resource` VALUES ('12', '7', '10');
89 | INSERT INTO `sys_role_resource` VALUES ('13', '7', '11');
90 |
91 | -- ----------------------------
92 | -- Table structure for sys_user
93 | -- ----------------------------
94 | DROP TABLE IF EXISTS `sys_user`;
95 | CREATE TABLE `sys_user` (
96 | `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
97 | `name` varchar(64) NOT NULL COMMENT '姓名',
98 | `account` varchar(64) NOT NULL COMMENT '账号',
99 | `password` varchar(128) NOT NULL COMMENT '密码',
100 | `salt` varchar(128) NOT NULL COMMENT '盐',
101 | `forbidden` char(1) NOT NULL COMMENT '是否禁用 0:否;1:是',
102 | PRIMARY KEY (`id`)
103 | ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
104 |
105 | -- ----------------------------
106 | -- Records of sys_user
107 | -- ----------------------------
108 | INSERT INTO `sys_user` VALUES ('4', 'admin', 'admin', 'd3ce866c2a856303a182c9e595d498f5', '8e7386142591cfa96ef7c293b5dfe72c', '0');
109 |
110 | -- ----------------------------
111 | -- Table structure for sys_user_role
112 | -- ----------------------------
113 | DROP TABLE IF EXISTS `sys_user_role`;
114 | CREATE TABLE `sys_user_role` (
115 | `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
116 | `user_id` int(32) NOT NULL COMMENT '用户ID',
117 | `role_id` int(32) NOT NULL COMMENT '资源ID',
118 | PRIMARY KEY (`id`)
119 | ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
120 |
121 | -- ----------------------------
122 | -- Records of sys_user_role
123 | -- ----------------------------
124 | INSERT INTO `sys_user_role` VALUES ('4', '4', '7');
125 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.sherlock
7 | premssion
8 | 0.0.1-SNAPSHOT
9 | jar
10 |
11 | premssion
12 | Demo project for Spring Boot
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.5.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | UTF-8
24 | 1.8
25 |
26 |
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-data-jpa
31 |
32 |
33 |
34 | org.springframework.boot
35 | spring-boot-starter-data-redis
36 |
37 |
38 |
39 | org.springframework.boot
40 | spring-boot-starter-web
41 |
42 |
43 |
44 | mysql
45 | mysql-connector-java
46 | runtime
47 |
48 |
49 |
50 | org.projectlombok
51 | lombok
52 | true
53 |
54 |
55 |
56 | org.springframework.boot
57 | spring-boot-starter-test
58 | test
59 |
60 |
61 |
62 | org.apache.shiro
63 | shiro-core
64 | 1.13.0
65 |
66 |
67 | org.apache.shiro
68 | shiro-spring
69 | 1.7.1
70 |
71 |
72 |
73 | org.apache.commons
74 | commons-lang3
75 | 3.7
76 |
77 |
78 |
79 |
80 |
81 |
82 | org.springframework.boot
83 | spring-boot-maven-plugin
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/PremssionApplication.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class PremssionApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(PremssionApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/config/ShiroConfig.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.config;
2 |
3 | import org.apache.shiro.mgt.SecurityManager;
4 | import org.apache.shiro.session.mgt.SessionManager;
5 | import org.apache.shiro.spring.LifecycleBeanPostProcessor;
6 | import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
7 | import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
8 | import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
9 | import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
10 | import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
11 | import org.springframework.context.annotation.Bean;
12 | import org.springframework.context.annotation.Configuration;
13 |
14 | import java.util.LinkedHashMap;
15 | import java.util.Map;
16 |
17 | /**
18 | * Shiro配置
19 | * author: 小宇宙
20 | * date: 2018/4/7
21 | */
22 | @Configuration
23 | public class ShiroConfig {
24 |
25 | @Bean("sessionManager")
26 | public SessionManager sessionManager(){
27 |
28 | DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
29 | //设置session过期时间为1小时
30 | sessionManager.setGlobalSessionTimeout(60 * 60 * 1000);
31 | sessionManager.setSessionValidationSchedulerEnabled(true);
32 | sessionManager.setSessionIdUrlRewritingEnabled(false);
33 | return sessionManager;
34 | }
35 |
36 | @Bean("securityManager")
37 | public SecurityManager securityManager(UserRealm userRealm, SessionManager sessionManager) {
38 | DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
39 | securityManager.setRealm(userRealm);
40 | securityManager.setSessionManager(sessionManager);
41 | return securityManager;
42 | }
43 |
44 | @Bean("shiroFilter")
45 | public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
46 | ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
47 | shiroFilter.setSecurityManager(securityManager);
48 | shiroFilter.setLoginUrl("/anno/notLogin");
49 | shiroFilter.setUnauthorizedUrl("/");
50 |
51 | Map filterMap = new LinkedHashMap<>();
52 | filterMap.put("/sys/**", "authc");
53 | filterMap.put("/anno/**", "anon");
54 | shiroFilter.setFilterChainDefinitionMap(filterMap);
55 |
56 | return shiroFilter;
57 | }
58 |
59 | @Bean("lifecycleBeanPostProcessor")
60 | public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
61 | return new LifecycleBeanPostProcessor();
62 | }
63 |
64 | @Bean
65 | public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
66 | DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator();
67 | proxyCreator.setProxyTargetClass(true);
68 | return proxyCreator;
69 | }
70 |
71 | @Bean
72 | public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
73 | AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
74 | advisor.setSecurityManager(securityManager);
75 | return advisor;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/config/UserRealm.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.config;
2 |
3 | import com.sherlock.premssion.enums.ForbiddenEnum;
4 | import com.sherlock.premssion.enums.REnum;
5 | import com.sherlock.premssion.model.SysUser;
6 | import com.sherlock.premssion.repository.SysResourceRepository;
7 | import com.sherlock.premssion.service.SysResourceService;
8 | import com.sherlock.premssion.service.SysUserService;
9 | import com.sherlock.premssion.utils.ShiroUtil;
10 | import lombok.extern.slf4j.Slf4j;
11 | import org.apache.shiro.authc.*;
12 | import org.apache.shiro.authc.credential.CredentialsMatcher;
13 | import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
14 | import org.apache.shiro.authz.AuthorizationInfo;
15 | import org.apache.shiro.authz.SimpleAuthorizationInfo;
16 | import org.apache.shiro.realm.AuthorizingRealm;
17 | import org.apache.shiro.subject.PrincipalCollection;
18 | import org.apache.shiro.util.ByteSource;
19 | import org.springframework.beans.factory.annotation.Autowired;
20 | import org.springframework.stereotype.Component;
21 |
22 | /**
23 | * 认证与授权规则
24 | * author: 小宇宙
25 | * date: 2018/4/5
26 | */
27 | @Slf4j
28 | @Component
29 | public class UserRealm extends AuthorizingRealm{
30 |
31 | @Autowired
32 | SysUserService sysUserService;
33 |
34 | @Autowired
35 | SysResourceService sysResourceService;
36 |
37 | /**
38 | * 用户授权
39 | * @param principalCollection
40 | * @return
41 | */
42 | @Override
43 | protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
44 |
45 | SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
46 | simpleAuthorizationInfo.setStringPermissions(sysResourceService.selectUserPerms(ShiroUtil.getUserId()));
47 | return simpleAuthorizationInfo;
48 | }
49 |
50 | /**
51 | * 用户认证
52 | * @param authenticationToken
53 | * @return
54 | * @throws AuthenticationException
55 | */
56 | @Override
57 | protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
58 |
59 | UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
60 |
61 | SysUser sysUser = sysUserService.findByAccount(token.getUsername());
62 | if(sysUser == null){
63 | log.error(REnum.UNkNOWN_ACCOUNT.getMessage()+"SysUser = {}"+sysUser);
64 | throw new UnknownAccountException();
65 | }
66 | if(ForbiddenEnum.DISABLE.getCode().toString().equals(sysUser.getForbidden())){
67 | log.error(REnum.UNkNOWN_ACCOUNT.getMessage()+"SysUser = {}"+sysUser);
68 | throw new DisabledAccountException();
69 | }
70 | SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(sysUser,sysUser.getPassword(),getName());
71 | simpleAuthenticationInfo.setCredentialsSalt(ByteSource.Util.bytes(sysUser.getSalt()));
72 | return simpleAuthenticationInfo;
73 | }
74 |
75 | /**
76 | * 密码验证服务
77 | * @param credentialsMatcher
78 | */
79 | public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {
80 | HashedCredentialsMatcher md5HashedCredentialsMatcher = new HashedCredentialsMatcher();
81 | md5HashedCredentialsMatcher.setHashAlgorithmName(ShiroUtil.hashAlgorithmName);
82 | md5HashedCredentialsMatcher.setHashIterations(ShiroUtil.hashIterations);
83 | md5HashedCredentialsMatcher.setStoredCredentialsHexEncoded(true);
84 | super.setCredentialsMatcher(md5HashedCredentialsMatcher);
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/controller/AnnoController.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.controller;
2 |
3 | import com.sherlock.premssion.enums.REnum;
4 | import com.sherlock.premssion.utils.Assert;
5 | import com.sherlock.premssion.utils.RUtil;
6 | import com.sherlock.premssion.utils.ShiroUtil;
7 | import com.sherlock.premssion.vo.R;
8 | import lombok.extern.slf4j.Slf4j;
9 | import org.apache.shiro.authc.*;
10 | import org.apache.shiro.subject.Subject;
11 | import org.springframework.web.bind.annotation.*;
12 |
13 | import java.util.Map;
14 |
15 | /**
16 | * author: 小宇宙
17 | * date: 2018/4/7
18 | */
19 | @RestController
20 | @RequestMapping("/anno")
21 | @Slf4j
22 | public class AnnoController {
23 |
24 | @PostMapping("/login")
25 | public R login(@RequestBody Map map){
26 |
27 | Assert.isBlank(map.get("account"),"账号不能为空");
28 | Assert.isBlank(map.get("password"),"密码不能为空");
29 |
30 |
31 | try{
32 | Subject subject = ShiroUtil.getSubject();
33 | UsernamePasswordToken token = new UsernamePasswordToken(map.get("account"),map.get("password"));
34 | subject.login(token);
35 | }catch (UnknownAccountException e) {
36 | return RUtil.error(REnum.USERNAME_OR_PASSWORD_ERROR.getCode(),REnum.USERNAME_OR_PASSWORD_ERROR.getMessage());
37 | }catch (IncorrectCredentialsException e) {
38 | return RUtil.error(REnum.USERNAME_OR_PASSWORD_ERROR.getCode(),REnum.USERNAME_OR_PASSWORD_ERROR.getMessage());
39 | }catch (DisabledAccountException e) {
40 | return RUtil.error(REnum.ACCOUNT_DISABLE.getCode(),REnum.ACCOUNT_DISABLE.getMessage());
41 | }catch (AuthenticationException e) {
42 | return RUtil.error(REnum.AUTH_ERROR.getCode(),REnum.AUTH_ERROR.getMessage());
43 | }
44 |
45 | return RUtil.success();
46 | }
47 |
48 | /**
49 | * 退出
50 | * @return
51 | */
52 | @GetMapping("/logout")
53 | public R logout(){
54 | ShiroUtil.logout();
55 | return RUtil.success();
56 | }
57 |
58 | /**
59 | * 登录页面
60 | * @return
61 | */
62 | @GetMapping("/notLogin")
63 | public R notLogin(){
64 | return RUtil.error(REnum.NOT_LOGIN.getCode(),REnum.NOT_LOGIN.getMessage());
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/controller/SysRoleController.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.controller;
2 |
3 | import com.sherlock.premssion.enums.REnum;
4 | import com.sherlock.premssion.exception.SystemException;
5 | import com.sherlock.premssion.from.SysRoleFrom;
6 | import com.sherlock.premssion.service.SysRoleService;
7 | import com.sherlock.premssion.utils.Assert;
8 | import com.sherlock.premssion.vo.R;
9 | import lombok.extern.slf4j.Slf4j;
10 | import org.apache.shiro.authz.annotation.RequiresPermissions;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.data.domain.PageRequest;
13 | import org.springframework.validation.BindingResult;
14 | import org.springframework.web.bind.annotation.*;
15 |
16 | import javax.validation.Valid;
17 |
18 | /**
19 | * author: 小宇宙
20 | * date: 2018/4/5
21 | */
22 | @RestController
23 | @RequestMapping("/sys")
24 | @Slf4j
25 | public class SysRoleController {
26 |
27 | @Autowired
28 | SysRoleService sysRoleService;
29 |
30 | /**
31 | * 新增角色
32 | * @param sysRoleFrom
33 | * @param bindingResult
34 | * @return
35 | */
36 | @RequiresPermissions("sys:role:insert")
37 | @PostMapping("/saveRole")
38 | public R saveRole(@Valid @RequestBody SysRoleFrom sysRoleFrom,
39 | BindingResult bindingResult){
40 | if(bindingResult.hasErrors()){
41 | log.error("【新增角色】参数不正确:sysRoleFrom={}"+ sysRoleFrom);
42 | throw new SystemException(REnum.PARAM_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());
43 | }
44 |
45 | return sysRoleService.saveRole(sysRoleFrom);
46 | }
47 |
48 | /**
49 | * 查询角色列表
50 | * @param page
51 | * @param size
52 | * @param name
53 | * @return
54 | */
55 | @RequiresPermissions("sys:role:list")
56 | @GetMapping("/selectRoleList")
57 | public R selectRoleList(@RequestParam(value = "page", defaultValue = "0") Integer page,
58 | @RequestParam(value = "size", defaultValue = "10") Integer size,
59 | @RequestParam(value = "name",defaultValue = "") String name){
60 |
61 | PageRequest pageRequest = new PageRequest(page,size);
62 | return sysRoleService.selectRoleList(name,pageRequest);
63 | }
64 |
65 | /**
66 | * 查询订单详情
67 | * @param id
68 | * @return
69 | */
70 | @RequiresPermissions("sys:role:detail")
71 | @GetMapping("/selectRoleDetail")
72 | public R selectRoleDetail(@RequestParam(value = "id",required = false) Integer id){
73 |
74 | Assert.isNull(id,"id不能为空");
75 | return sysRoleService.selectRoleDetail(id);
76 |
77 | }
78 |
79 | /**
80 | * 更新角色
81 | * @param sysRoleFrom
82 | * @param bindingResult
83 | * @return
84 | */
85 | @RequiresPermissions("sys:role:update")
86 | @PutMapping("/updateRole")
87 | public R updateRole(@Valid @RequestBody SysRoleFrom sysRoleFrom,
88 | BindingResult bindingResult){
89 |
90 | Assert.isNull(sysRoleFrom.getId(),"id不能为空");
91 |
92 | if(bindingResult.hasErrors()){
93 | log.error("【更新角色】参数不正确:sysRoleFrom={}"+ sysRoleFrom);
94 | throw new SystemException(REnum.PARAM_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());
95 | }
96 |
97 | return sysRoleService.updateRole(sysRoleFrom);
98 | }
99 |
100 | /**
101 | * 删除角色
102 | * @param id
103 | * @return
104 | */
105 | @RequiresPermissions("sys:role:delete")
106 | @DeleteMapping("/deleteRole/{id}")
107 | public R deleteRole(@PathVariable Integer id){
108 | return sysRoleService.deleteRole(id);
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/controller/SysUserController.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.controller;
2 |
3 | import com.sherlock.premssion.enums.REnum;
4 | import com.sherlock.premssion.exception.SystemException;
5 | import com.sherlock.premssion.from.SysUserFrom;
6 | import com.sherlock.premssion.service.SysUserService;
7 | import com.sherlock.premssion.utils.Assert;
8 | import com.sherlock.premssion.vo.R;
9 | import lombok.extern.slf4j.Slf4j;
10 | import org.apache.shiro.authz.annotation.RequiresPermissions;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.data.domain.PageRequest;
13 | import org.springframework.validation.BindingResult;
14 | import org.springframework.web.bind.annotation.*;
15 |
16 | import javax.validation.Valid;
17 |
18 | /**
19 | * author: 小宇宙
20 | * date: 2018/4/5
21 | */
22 | @RestController
23 | @RequestMapping("/sys")
24 | @Slf4j
25 | public class SysUserController {
26 |
27 | @Autowired
28 | SysUserService sysUserService;
29 |
30 | /**
31 | * 新增用户
32 | * @param sysUserFrom
33 | * @param bindingResult
34 | * @return
35 | */
36 | @RequiresPermissions("sys:user:insert")
37 | @PostMapping("/saveUser")
38 | public R saveUser(@Valid @RequestBody SysUserFrom sysUserFrom,
39 | BindingResult bindingResult){
40 | if(bindingResult.hasErrors()){
41 | log.error("【新增用户】参数不正确:sysUserFrom={}"+ sysUserFrom);
42 | throw new SystemException(REnum.PARAM_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());
43 | }
44 |
45 | return sysUserService.saveUser(sysUserFrom);
46 | }
47 |
48 |
49 | /**
50 | * 查询用户列表
51 | * @param page
52 | * @param size
53 | * @param name
54 | * @return
55 | */
56 | @RequiresPermissions("sys:user:list")
57 | @GetMapping("/selectUserList")
58 | public R selectUserList(@RequestParam(value = "page", defaultValue = "0") Integer page,
59 | @RequestParam(value = "size", defaultValue = "10") Integer size,
60 | @RequestParam(value = "name",defaultValue = "") String name){
61 |
62 | PageRequest pageRequest = new PageRequest(page,size);
63 | return sysUserService.selectUserList(name,pageRequest);
64 | }
65 |
66 | /**
67 | * 查询用户详情
68 | * @param id
69 | * @return
70 | */
71 | @RequiresPermissions("sys:user:detail")
72 | @GetMapping("/selectUserDetail")
73 | public R selectUserDetail(@RequestParam(value = "id",required = false) Integer id){
74 |
75 | Assert.isNull(id,"id不能为空");
76 | return sysUserService.selectUserDetail(id);
77 | }
78 |
79 | /**
80 | * 更新用户
81 | * @param sysUserFrom
82 | * @param bindingResult
83 | * @return
84 | */
85 | @RequiresPermissions("sys:user:update")
86 | @PutMapping("/updateUser")
87 | public R updateUser(@Valid @RequestBody SysUserFrom sysUserFrom,
88 | BindingResult bindingResult){
89 |
90 | Assert.isNull(sysUserFrom.getId(),"id不能为空");
91 |
92 | if(bindingResult.hasErrors()){
93 | log.error("【更新用户】参数不正确:sysRoleFrom={}"+ sysUserFrom);
94 | throw new SystemException(REnum.PARAM_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());
95 | }
96 |
97 | return sysUserService.updateUser(sysUserFrom);
98 | }
99 |
100 | /**
101 | * 删除用户
102 | * @param id
103 | * @return
104 | */
105 | @RequiresPermissions("sys:user:delete")
106 | @DeleteMapping("/deleteUser/{id}")
107 | public R deleteUser(@PathVariable Integer id){
108 | return sysUserService.delectUser(id);
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/enums/ForbiddenEnum.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.enums;
2 |
3 | /**
4 | * 系统用户状态枚举
5 | * author: 小宇宙
6 | * date: 2018/4/5
7 | */
8 | public enum ForbiddenEnum {
9 |
10 | ENABLE(0,"启用"),
11 |
12 | DISABLE(1,"禁用");
13 |
14 | private Integer code;
15 |
16 | private String message;
17 |
18 | public Integer getCode() {
19 | return code;
20 | }
21 |
22 | public String getMessage() {
23 | return message;
24 | }
25 |
26 | ForbiddenEnum(Integer code, String message) {
27 | this.code = code;
28 | this.message = message;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/enums/REnum.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.enums;
2 |
3 | /**
4 | * Http返回信息枚举
5 | * author: 小宇宙
6 | * date: 2018/4/5
7 | */
8 | public enum REnum {
9 |
10 | UNkNOWN_ACCOUNT(1,"用户不存在"),
11 |
12 | PARAM_ERROR(2, "参数不正确"),
13 |
14 | ACCOUNT_EXIST(3,"该账号已存在"),
15 |
16 | USERNAME_OR_PASSWORD_ERROR(4,"用户名或密码错误"),
17 |
18 | ACCOUNT_DISABLE(5,"账号已被禁用"),
19 |
20 | AUTH_ERROR(6,"账户验证失败"),
21 |
22 | NOT_LOGIN(7,"未登录"),
23 |
24 | NOT_PERMSSION(8,"您没有访问该功能的权限");
25 |
26 | private Integer code;
27 |
28 | private String message;
29 |
30 | public Integer getCode() {
31 | return code;
32 | }
33 |
34 | public String getMessage() {
35 | return message;
36 | }
37 |
38 | REnum(Integer code, String message) {
39 | this.code = code;
40 | this.message = message;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/exception/SystemException.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.exception;
2 |
3 | import com.sherlock.premssion.enums.REnum;
4 |
5 | /**
6 | * 自定义异常类
7 | * author: 小宇宙
8 | * date: 2018/4/5
9 | */
10 | public class SystemException extends RuntimeException{
11 |
12 | private Integer code;
13 |
14 | public SystemException(REnum rEnum) {
15 | super(rEnum.getMessage());
16 |
17 | this.code = rEnum.getCode();
18 | }
19 |
20 | public SystemException(Integer code, String message) {
21 | super(message);
22 | this.code = code;
23 | }
24 |
25 | public SystemException(String message) {
26 | super(message);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/exception/SystemExceptionHandler.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.exception;
2 |
3 | import com.sherlock.premssion.enums.REnum;
4 | import com.sherlock.premssion.utils.RUtil;
5 | import com.sherlock.premssion.vo.R;
6 | import lombok.extern.slf4j.Slf4j;
7 | import org.apache.shiro.authz.AuthorizationException;
8 | import org.springframework.web.bind.annotation.ExceptionHandler;
9 | import org.springframework.web.bind.annotation.RestControllerAdvice;
10 |
11 | /**
12 | * 异常处理器
13 | * author: 小宇宙
14 | * date: 2018/4/7
15 | */
16 | @Slf4j
17 | @RestControllerAdvice
18 | public class SystemExceptionHandler {
19 |
20 | /**
21 | * 缺少权限异常处理
22 | * @param e
23 | * @return
24 | */
25 | @ExceptionHandler(AuthorizationException.class)
26 | public R handleAuthorizationException(AuthorizationException e){
27 | log.error(REnum.NOT_PERMSSION.getMessage());
28 | return RUtil.error(REnum.NOT_PERMSSION.getCode(),REnum.NOT_PERMSSION.getMessage());
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/from/SysRoleFrom.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.from;
2 |
3 | import com.sherlock.premssion.model.SysResource;
4 | import lombok.Data;
5 | import org.hibernate.validator.constraints.Length;
6 | import org.hibernate.validator.constraints.NotEmpty;
7 | import org.hibernate.validator.constraints.Range;
8 |
9 | import javax.validation.constraints.Digits;
10 | import java.util.List;
11 |
12 | /**
13 | * author: 小宇宙
14 | * date: 2018/4/6
15 | */
16 | @Data
17 | public class SysRoleFrom {
18 |
19 | /**
20 | * 角色id
21 | */
22 | private Integer id;
23 |
24 | /**
25 | * 角色名
26 | */
27 | @Length(max = 32,message = "长度不能超过32位")
28 | @NotEmpty(message = "角色名称不能为空")
29 | private String name;
30 |
31 | /**
32 | * 角色等级
33 | */
34 | @Digits(integer=2,fraction=0,message = "等级必须为整数")
35 | @Range(min = 1,max = 10,message = "等级系数在1到10之间")
36 | private Integer grade;
37 |
38 | /**
39 | * 备注
40 | */
41 | @Length(max = 64,message = "长度不能超过64位")
42 | private String remark;
43 |
44 | /**
45 | * 拥有资源
46 | */
47 | private List sysResources;
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/from/SysUserFrom.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.from;
2 |
3 | import com.sherlock.premssion.model.SysRole;
4 | import lombok.Data;
5 | import org.hibernate.validator.constraints.Length;
6 | import org.hibernate.validator.constraints.NotEmpty;
7 | import org.hibernate.validator.constraints.Range;
8 |
9 | import javax.validation.constraints.Digits;
10 | import java.util.List;
11 |
12 | /**
13 | * author: 小宇宙
14 | * date: 2018/4/7
15 | */
16 | @Data
17 | public class SysUserFrom {
18 |
19 | /**
20 | * 主键id
21 | */
22 | private Integer id;
23 |
24 | /**
25 | * 姓名
26 | */
27 | @Length(max = 32,message = "长度不能超过32位")
28 | @NotEmpty(message = "名称不能为空")
29 | private String name;
30 |
31 | /**
32 | * 账号
33 | */
34 | @Length(max = 32,message = "长度不能超过32位")
35 | @NotEmpty(message = "账号名称不能为空")
36 | private String account;
37 |
38 | /**
39 | * 密码
40 | */
41 | @Length(max = 64,message = "长度不能超过64位")
42 | @NotEmpty(message = "密码名称不能为空")
43 | private String password;
44 |
45 |
46 | /**
47 | * 是否禁用 0:否;1:是
48 | */
49 | @Digits(integer=1,fraction=0,message = "必须为整数")
50 | @Range(min = 0,max = 1,message = "等级系数在1或2之间")
51 | private String forbidden;
52 |
53 | /**
54 | * 用户角色
55 | */
56 | private List sysRoles;
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/model/SysResource.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.model;
2 |
3 | import lombok.Data;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.GeneratedValue;
7 | import javax.persistence.Id;
8 |
9 | /**
10 | * 资源
11 | * author: 小宇宙
12 | * date: 2018/4/5
13 | */
14 | @Data
15 | @Entity
16 | public class SysResource {
17 |
18 | /**
19 | * 主键id
20 | */
21 | @Id
22 | @GeneratedValue
23 | private Integer id;
24 |
25 | /**
26 | * 资源父id
27 | */
28 | private Integer parentId;
29 |
30 | /**
31 | * 资源名称
32 | */
33 | private String name;
34 |
35 | /**
36 | * 权限标识符
37 | */
38 | private String perms;
39 |
40 | /**
41 | * 类型:0:目录,1:菜单,2:按钮
42 | */
43 | private String type;
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/model/SysRole.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.model;
2 |
3 | import lombok.Data;
4 |
5 | import javax.persistence.*;
6 |
7 | /**
8 | * 角色
9 | * author: 小宇宙
10 | * date: 2018/4/5
11 | */
12 | @Data
13 | @Entity
14 | public class SysRole {
15 |
16 | /**
17 | * 主键id
18 | */
19 | @Id
20 | @GeneratedValue
21 | private Integer id;
22 |
23 | /**
24 | * 角色名
25 | */
26 | private String name;
27 |
28 | /**
29 | * 角色等级
30 | */
31 | private Integer grade;
32 |
33 | /**
34 | * 备注
35 | */
36 | private String remark;
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/model/SysRoleResource.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.model;
2 |
3 |
4 | import lombok.Data;
5 |
6 | import javax.persistence.Entity;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.Id;
9 |
10 | /**
11 | * 角色资源关系
12 | * author: 小宇宙
13 | * date: 2018/4/5
14 | */
15 | @Data
16 | @Entity
17 | public class SysRoleResource {
18 |
19 | /**
20 | * 主键id
21 | */
22 | @Id
23 | @GeneratedValue
24 | private Integer id;
25 |
26 | /**
27 | * 角色id
28 | */
29 | private Integer roleId;
30 |
31 | /**
32 | * 资源id
33 | */
34 | private Integer resourceId;
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/model/SysUser.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.model;
2 |
3 | import com.fasterxml.jackson.annotation.JsonIgnore;
4 | import lombok.Data;
5 |
6 | import javax.persistence.Entity;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.Id;
9 |
10 | /**
11 | * 用户
12 | * author: 小宇宙
13 | * date: 2018/4/5
14 | */
15 | @Data
16 | @Entity
17 | public class SysUser {
18 |
19 | /**
20 | * 主键id
21 | */
22 | @Id
23 | @GeneratedValue
24 | private Integer id;
25 |
26 | /**
27 | * 姓名
28 | */
29 | private String name;
30 |
31 | /**
32 | * 账号
33 | */
34 | private String account;
35 |
36 | /**
37 | * 密码
38 | */
39 | @JsonIgnore
40 | private String password;
41 |
42 | /**
43 | * 盐
44 | */
45 | @JsonIgnore
46 | private String salt;
47 |
48 | /**
49 | * 是否禁用 0:否;1:是
50 | */
51 | private String forbidden;
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/model/SysUserRole.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.model;
2 |
3 | import lombok.Data;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.GeneratedValue;
7 | import javax.persistence.Id;
8 |
9 | /**
10 | * 用户角色关系
11 | * author: 小宇宙
12 | * date: 2018/4/5
13 | */
14 | @Data
15 | @Entity
16 | public class SysUserRole {
17 |
18 | /**
19 | * 主键id
20 | */
21 | @Id
22 | @GeneratedValue
23 | private Integer id;
24 |
25 |
26 | /**
27 | * 用户Id
28 | */
29 | private Integer userId;
30 |
31 |
32 | /**
33 | * 角色Id
34 | */
35 | private Integer roleId;
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/repository/SysResourceRepository.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.repository;
2 |
3 | import com.sherlock.premssion.model.SysResource;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | /**
7 | * author: 小宇宙
8 | * date: 2018/4/5
9 | */
10 | public interface SysResourceRepository extends JpaRepository {
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/repository/SysRoleRepository.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.repository;
2 |
3 | import com.sherlock.premssion.model.SysRole;
4 | import org.springframework.data.domain.Page;
5 | import org.springframework.data.domain.Pageable;
6 | import org.springframework.data.jpa.domain.Specification;
7 | import org.springframework.data.jpa.repository.JpaRepository;
8 |
9 |
10 | /**
11 | * author: 小宇宙
12 | * date: 2018/4/5
13 | */
14 | public interface SysRoleRepository extends JpaRepository {
15 |
16 | Page findAll(Specification sysRoleSpecification, Pageable pageable);
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/repository/SysRoleResourceRepository.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.repository;
2 |
3 | import com.sherlock.premssion.model.SysRoleResource;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * author: 小宇宙
10 | * date: 2018/4/5
11 | */
12 | public interface SysRoleResourceRepository extends JpaRepository {
13 |
14 | List findByRoleId(Integer roleId);
15 |
16 | List findByRoleId(List roleIds);
17 |
18 | void deleteByRoleId(Integer id);
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/repository/SysUserRepository.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.repository;
2 |
3 | import com.sherlock.premssion.model.SysUser;
4 | import org.springframework.data.domain.Page;
5 | import org.springframework.data.domain.Pageable;
6 | import org.springframework.data.jpa.domain.Specification;
7 | import org.springframework.data.jpa.repository.JpaRepository;
8 |
9 |
10 | /**
11 | * author: 小宇宙
12 | * date: 2018/4/5
13 | */
14 | public interface SysUserRepository extends JpaRepository {
15 |
16 | /**
17 | * 根据账号查询用户
18 | * @param account
19 | * @return
20 | */
21 | SysUser findByAccount(String account);
22 |
23 | Page findAll(Specification sysRoleSpecification, Pageable pageable);
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/repository/SysUserRoleRepository.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.repository;
2 |
3 | import com.sherlock.premssion.model.SysUserRole;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * author: 小宇宙
10 | * date: 2018/4/5
11 | */
12 | public interface SysUserRoleRepository extends JpaRepository{
13 |
14 | List findByUserId(Integer id);
15 |
16 | void deleteByUserId(Integer id);
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/service/SysResourceService.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.service;
2 |
3 | import com.sherlock.premssion.model.SysResource;
4 |
5 | import java.util.Set;
6 |
7 | /**
8 | * author: 小宇宙
9 | * date: 2018/4/5
10 | */
11 | public interface SysResourceService {
12 |
13 | Set selectUserPerms(Integer userId);
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/service/SysRoleService.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.service;
2 |
3 | import com.sherlock.premssion.from.SysRoleFrom;
4 | import com.sherlock.premssion.vo.R;
5 | import org.springframework.data.domain.Pageable;
6 |
7 | /**
8 | * author: 小宇宙
9 | * date: 2018/4/5
10 | */
11 | public interface SysRoleService {
12 |
13 | R saveRole(SysRoleFrom sysRoleFrom);
14 |
15 | R selectRoleList(String name,Pageable pageable);
16 |
17 | R selectRoleDetail(Integer id);
18 |
19 | R updateRole(SysRoleFrom sysRoleFrom);
20 |
21 | R deleteRole(Integer id);
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/service/SysUserService.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.service;
2 |
3 | import com.sherlock.premssion.from.SysUserFrom;
4 | import com.sherlock.premssion.model.SysUser;
5 | import com.sherlock.premssion.vo.R;
6 | import org.springframework.data.domain.Pageable;
7 |
8 |
9 | /**
10 | * author: 小宇宙
11 | * date: 2018/4/5
12 | */
13 | public interface SysUserService {
14 |
15 | SysUser findByAccount(String account);
16 |
17 | R saveUser(SysUserFrom sysUserFrom);
18 |
19 | R selectUserList(String name, Pageable pageable);
20 |
21 | R selectUserDetail(Integer id);
22 |
23 | R updateUser(SysUserFrom sysUserFrom);
24 |
25 | R delectUser(Integer id);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/service/impl/SysResourceServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.service.impl;
2 |
3 | import com.sherlock.premssion.model.SysResource;
4 | import com.sherlock.premssion.model.SysRoleResource;
5 | import com.sherlock.premssion.model.SysUserRole;
6 | import com.sherlock.premssion.repository.SysResourceRepository;
7 | import com.sherlock.premssion.repository.SysRoleResourceRepository;
8 | import com.sherlock.premssion.repository.SysUserRoleRepository;
9 | import com.sherlock.premssion.service.SysResourceService;
10 | import lombok.extern.slf4j.Slf4j;
11 | import org.apache.commons.lang3.StringUtils;
12 | import org.springframework.beans.factory.annotation.Autowired;
13 | import org.springframework.stereotype.Service;
14 |
15 | import javax.transaction.Transactional;
16 | import java.util.ArrayList;
17 | import java.util.HashSet;
18 | import java.util.List;
19 | import java.util.Set;
20 |
21 | /**
22 | * author: 小宇宙
23 | * date: 2018/4/5
24 | */
25 | @Service
26 | @Slf4j
27 | @Transactional
28 | public class SysResourceServiceImpl implements SysResourceService {
29 |
30 | @Autowired
31 | SysResourceRepository sysResourceRepository;
32 |
33 | @Autowired
34 | SysUserRoleRepository sysUserRoleRepository;
35 |
36 | @Autowired
37 | SysRoleResourceRepository sysRoleResourceRepository;
38 |
39 | /**
40 | * 查询用户权限表示符
41 | * @return
42 | */
43 | @Override
44 | public Set selectUserPerms(Integer userId) {
45 |
46 | /*获取角色Id*/
47 | List roleIds = new ArrayList<>();
48 | List sysUserRoles = sysUserRoleRepository.findByUserId(userId);
49 | sysUserRoles.forEach(o->{
50 | roleIds.add(o.getRoleId());
51 | });
52 |
53 | /*获取资源Id*/
54 | List sysRoleResources = sysRoleResourceRepository.findByRoleId(roleIds);
55 | List resourceIds = new ArrayList<>();
56 | sysRoleResources.forEach(o->{
57 | resourceIds.add(o.getResourceId());
58 | });
59 |
60 | /*获取权限标识符*/
61 | Set prems = new HashSet<>();
62 | List sysResources = sysResourceRepository.findAll(resourceIds);
63 | sysResources.forEach(o->{
64 | if(StringUtils.isNoneBlank(o.getPerms())){
65 | prems.add(o.getPerms());
66 | }
67 | });
68 | return prems;
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/service/impl/SysRoleServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.service.impl;
2 |
3 | import com.sherlock.premssion.from.SysRoleFrom;
4 | import com.sherlock.premssion.model.SysResource;
5 | import com.sherlock.premssion.model.SysRole;
6 | import com.sherlock.premssion.model.SysRoleResource;
7 | import com.sherlock.premssion.repository.SysResourceRepository;
8 | import com.sherlock.premssion.repository.SysRoleRepository;
9 | import com.sherlock.premssion.repository.SysRoleResourceRepository;
10 | import com.sherlock.premssion.service.SysRoleService;
11 | import com.sherlock.premssion.utils.JPAUtil;
12 | import com.sherlock.premssion.utils.RUtil;
13 | import com.sherlock.premssion.vo.R;
14 | import com.sherlock.premssion.vo.SysRoleVo;
15 | import lombok.extern.slf4j.Slf4j;
16 | import org.apache.commons.lang3.StringUtils;
17 | import org.springframework.beans.BeanUtils;
18 | import org.springframework.beans.factory.annotation.Autowired;
19 | import org.springframework.data.domain.Pageable;
20 | import org.springframework.data.jpa.domain.Specification;
21 | import org.springframework.stereotype.Service;
22 |
23 | import javax.persistence.criteria.CriteriaBuilder;
24 | import javax.persistence.criteria.CriteriaQuery;
25 | import javax.persistence.criteria.Predicate;
26 | import javax.persistence.criteria.Root;
27 | import javax.transaction.Transactional;
28 | import java.util.ArrayList;
29 | import java.util.List;
30 |
31 | /**
32 | * author: 小宇宙
33 | * date: 2018/4/5
34 | */
35 | @Service
36 | @Transactional
37 | @Slf4j
38 | public class SysRoleServiceImpl implements SysRoleService {
39 |
40 | @Autowired
41 | SysRoleRepository sysRoleRepository;
42 |
43 | @Autowired
44 | SysRoleResourceRepository sysRoleResourceRepository;
45 |
46 | @Autowired
47 | SysResourceRepository sysResourceRepository;
48 | /**
49 | * 新增角色
50 | * @param sysRoleFrom
51 | * @return
52 | */
53 | @Override
54 | public R saveRole(SysRoleFrom sysRoleFrom) {
55 |
56 | /*分离对象并保存*/
57 | SysRole sysRole = new SysRole();
58 | BeanUtils.copyProperties(sysRoleFrom,sysRole);
59 | SysRole sysRoleSave = sysRoleRepository.save(sysRole);
60 | log.info("角色基本信息保存:sysRoleSave = {}"+sysRoleSave);
61 |
62 | /*构建该角色的资源并保存*/
63 | List sysRoleResources = new ArrayList<>();
64 | sysRoleFrom.getSysResources().forEach(o->{
65 | SysRoleResource sysRoleResource = new SysRoleResource();
66 | sysRoleResource.setRoleId(sysRoleSave.getId());
67 | sysRoleResource.setResourceId(o.getId());
68 | sysRoleResources.add(sysRoleResource);
69 | });
70 | List sysRoleResourcesSave = sysRoleResourceRepository.save(sysRoleResources);
71 | log.info("角色资源保存:sysRoleResourcesSave = {}"+sysRoleResourcesSave);
72 |
73 | return RUtil.success();
74 | }
75 |
76 | /**
77 | * 查询角色列表
78 | * @param pageable
79 | * @return
80 | */
81 | public R selectRoleList(String name,Pageable pageable){
82 | Specification specification = new Specification() {
83 | @Override
84 | public Predicate toPredicate(Root root, CriteriaQuery> criteriaQuery, CriteriaBuilder criteriaBuilder) {
85 | List predicate = new ArrayList<>();
86 | if(StringUtils.isNoneBlank(name)){
87 | predicate.add(criteriaBuilder.like(root.get("name").as(String.class), JPAUtil.like(name)));
88 | }
89 | Predicate[] pre = new Predicate[predicate.size()];
90 | return criteriaQuery.where(predicate.toArray(pre)).getRestriction();
91 | }
92 | };
93 | return RUtil.success(sysRoleRepository.findAll(specification,pageable));
94 | }
95 |
96 | /**
97 | * 查询角色详情
98 | * @param id
99 | * @return
100 | */
101 | @Override
102 | public R selectRoleDetail(Integer id) {
103 |
104 | /*查询角色基本信息*/
105 | SysRoleVo sysRoleVo = new SysRoleVo();
106 | SysRole sysRole = sysRoleRepository.findOne(id);
107 | BeanUtils.copyProperties(sysRole,sysRoleVo);
108 |
109 | /*取出resourceId*/
110 | List sysResourceIds = new ArrayList<>();
111 | List sysRoleResources = sysRoleResourceRepository.findByRoleId(id);
112 | sysRoleResources.forEach(o->{
113 | sysResourceIds.add(o.getResourceId());
114 | });
115 |
116 | /*查询该角色拥有资源*/
117 | List sysResources = sysResourceRepository.findAll(sysResourceIds);
118 | sysRoleVo.setSysResources(sysResources);
119 |
120 | log.info("角色详情:sysRoleVo = {}"+sysRoleVo);
121 | return RUtil.success(sysRoleVo);
122 | }
123 |
124 | /**
125 | * 更新角色
126 | * @param sysRoleFrom
127 | * @return
128 | */
129 | @Override
130 | public R updateRole(SysRoleFrom sysRoleFrom){
131 |
132 | /*分离角色与拥有资源*/
133 | SysRole sysRole = new SysRole();
134 | BeanUtils.copyProperties(sysRoleFrom,sysRole);
135 |
136 | /*初始化角色资源*/
137 | sysRoleResourceRepository.deleteByRoleId(sysRoleFrom.getId());
138 |
139 | /*角色基本信息更新*/
140 | SysRole sysRoleSave = sysRoleRepository.save(sysRole);
141 | log.info("角色基本信息更新:sysRoleSave = {}"+sysRoleSave);
142 |
143 | /*更新角色资源*/
144 | List sysRoleResources = new ArrayList<>();
145 | sysRoleFrom.getSysResources().forEach(o->{
146 | SysRoleResource sysRoleResource = new SysRoleResource();
147 | sysRoleResource.setResourceId(o.getId());
148 | sysRoleResource.setRoleId(sysRoleFrom.getId());
149 | sysRoleResources.add(sysRoleResource);
150 | });
151 | List sysRoleResourcesSave = sysRoleResourceRepository.save(sysRoleResources);
152 | log.info("资源更新:sysRoleResourcesSave = {}"+sysRoleResourcesSave);
153 |
154 | return RUtil.success();
155 | }
156 |
157 | /**
158 | * 删除角色接口
159 | * @param id
160 | * @return
161 | */
162 | @Override
163 | public R deleteRole(Integer id){
164 | sysRoleRepository.delete(id);
165 |
166 | /*资源删除*/
167 | sysRoleResourceRepository.deleteByRoleId(id);
168 | return RUtil.success();
169 | }
170 | }
171 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/service/impl/SysUserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.service.impl;
2 |
3 | import com.sherlock.premssion.enums.REnum;
4 | import com.sherlock.premssion.from.SysUserFrom;
5 | import com.sherlock.premssion.model.SysRole;
6 | import com.sherlock.premssion.model.SysUser;
7 | import com.sherlock.premssion.model.SysUserRole;
8 | import com.sherlock.premssion.repository.SysRoleRepository;
9 | import com.sherlock.premssion.repository.SysUserRepository;
10 | import com.sherlock.premssion.repository.SysUserRoleRepository;
11 | import com.sherlock.premssion.service.SysUserService;
12 | import com.sherlock.premssion.utils.JPAUtil;
13 | import com.sherlock.premssion.utils.RUtil;
14 | import com.sherlock.premssion.utils.ShiroUtil;
15 | import com.sherlock.premssion.vo.R;
16 | import com.sherlock.premssion.vo.SysUserVo;
17 | import lombok.extern.slf4j.Slf4j;
18 | import org.apache.commons.lang3.StringUtils;
19 | import org.springframework.beans.BeanUtils;
20 | import org.springframework.beans.factory.annotation.Autowired;
21 | import org.springframework.data.domain.Pageable;
22 | import org.springframework.data.jpa.domain.Specification;
23 | import org.springframework.stereotype.Service;
24 |
25 | import javax.persistence.criteria.CriteriaBuilder;
26 | import javax.persistence.criteria.CriteriaQuery;
27 | import javax.persistence.criteria.Predicate;
28 | import javax.persistence.criteria.Root;
29 | import javax.transaction.Transactional;
30 | import java.util.ArrayList;
31 | import java.util.List;
32 |
33 | /**
34 | * author: 小宇宙
35 | * date: 2018/4/5
36 | */
37 | @Service
38 | @Transactional
39 | @Slf4j
40 | public class SysUserServiceImpl implements SysUserService {
41 |
42 | @Autowired
43 | SysUserRepository sysUserRepository;
44 |
45 | @Autowired
46 | SysUserRoleRepository sysUserRoleRepository;
47 |
48 | @Autowired
49 | SysRoleRepository sysRoleRepository;
50 |
51 | /**
52 | * 根据账号查询用户
53 | * @param account
54 | * @return
55 | */
56 | public SysUser findByAccount(String account){
57 | return sysUserRepository.findByAccount(account);
58 | }
59 |
60 | /**
61 | * 新增用户
62 | * @param sysUserFrom
63 | * @return
64 | */
65 | @Override
66 | public R saveUser(SysUserFrom sysUserFrom) {
67 |
68 | /*判断该账号是否存在*/
69 | if(sysUserRepository.findByAccount(sysUserFrom.getAccount()) != null){
70 | log.error(sysUserFrom.getAccount());
71 | return RUtil.error(REnum.ACCOUNT_EXIST.getCode(),REnum.ACCOUNT_EXIST.getMessage());
72 | }
73 |
74 | /*分离用户基本信息与其角色*/
75 | SysUser sysUser = new SysUser();
76 | BeanUtils.copyProperties(sysUserFrom,sysUser);
77 |
78 | /*生成盐以及加密码并保存*/
79 | String salt = ShiroUtil.getSalt();
80 | String md5Password = ShiroUtil.MD5(sysUser.getPassword(),salt);
81 | sysUser.setPassword(md5Password);
82 | sysUser.setSalt(salt);
83 | SysUser sysUserSave = sysUserRepository.save(sysUser);
84 | log.info("用户基本信息保存:sysUserSave = {}"+sysUserSave);
85 |
86 | /*用户对应角色保存*/
87 | List sysUserRoles = new ArrayList<>();
88 | sysUserFrom.getSysRoles().forEach(o->{
89 | SysUserRole sysUserRole = new SysUserRole();
90 | sysUserRole.setUserId(sysUserSave.getId());
91 | sysUserRole.setRoleId(o.getId());
92 | sysUserRoles.add(sysUserRole);
93 | });
94 | List sysUserRolesSave = sysUserRoleRepository.save(sysUserRoles);
95 | log.info("用户角色保存:sysUserRolesSave = {}"+sysUserRolesSave);
96 | return RUtil.success();
97 | }
98 |
99 | /**
100 | * 查询用户列表
101 | * @param name
102 | * @param pageable
103 | * @return
104 | */
105 | @Override
106 | public R selectUserList(String name, Pageable pageable) {
107 | Specification specification = new Specification() {
108 | @Override
109 | public Predicate toPredicate(Root root, CriteriaQuery> criteriaQuery, CriteriaBuilder criteriaBuilder) {
110 | List predicate = new ArrayList<>();
111 | if(StringUtils.isNoneBlank(name)){
112 | predicate.add(criteriaBuilder.like(root.get("name").as(String.class), JPAUtil.like(name)));
113 | }
114 | Predicate[] pre = new Predicate[predicate.size()];
115 | return criteriaQuery.where(predicate.toArray(pre)).getRestriction();
116 | }
117 | };
118 | return RUtil.success(sysUserRepository.findAll(specification,pageable));
119 | }
120 |
121 | /**
122 | * 查询用户详情
123 | * @param id
124 | * @return
125 | */
126 | @Override
127 | public R selectUserDetail(Integer id) {
128 |
129 | /*查询用户基本信息*/
130 | SysUserVo sysUserVo = new SysUserVo();
131 | SysUser sysUser = sysUserRepository.findOne(id);
132 | BeanUtils.copyProperties(sysUser,sysUserVo);
133 | sysUserVo.setPassword("*********");
134 | log.info("用户基本信息:sysUser = {}"+sysUser);
135 |
136 | /*取出角色Id*/
137 | List sysUserRoles = sysUserRoleRepository.findByUserId(id);
138 | List sysRoleIds = new ArrayList<>();
139 | sysUserRoles.forEach(o->{
140 | sysRoleIds.add(o.getRoleId());
141 | });
142 |
143 | /*查询该用户用户角色*/
144 | List sysRoles = sysRoleRepository.findAll(sysRoleIds);
145 | log.info("用户角色:sysRoles = {}"+ sysRoles);
146 | sysUserVo.setSysRoles(sysRoles);
147 | return RUtil.success(sysUserVo);
148 | }
149 |
150 | /**
151 | * 更新用户
152 | * @param sysUserFrom
153 | * @return
154 | */
155 | @Override
156 | public R updateUser(SysUserFrom sysUserFrom) {
157 |
158 | /*判断用户有没有修改账号*/
159 | if(!sysUserRepository.findOne(sysUserFrom.getId()).getAccount().equals(sysUserFrom.getAccount())){
160 | /*用户修改账号*/
161 |
162 | /*判断该账号是否存在*/
163 | if(sysUserRepository.findByAccount(sysUserFrom.getAccount()) != null){
164 | log.error(sysUserFrom.getAccount());
165 | return RUtil.error(REnum.ACCOUNT_EXIST.getCode(),REnum.ACCOUNT_EXIST.getMessage());
166 | }
167 | }
168 | /*账号未修改*/
169 |
170 | /*分离用户与其拥有角色*/
171 | SysUser sysUser = new SysUser();
172 | BeanUtils.copyProperties(sysUserFrom,sysUser);
173 |
174 | /*初始化密码与盐并保存*/
175 | String salt = ShiroUtil.getSalt();
176 | String md5Password = ShiroUtil.MD5(sysUser.getPassword(),salt);
177 | sysUser.setPassword(md5Password);
178 | sysUser.setSalt(salt);
179 | SysUser sysUserSave = sysUserRepository.save(sysUser);
180 | log.info("用户更新:sysUserSave = {}"+ sysUserSave);
181 |
182 | /*初始化用户角色*/
183 | sysUserRoleRepository.deleteByUserId(sysUserFrom.getId());
184 |
185 | /*添加用户角色*/
186 | List sysUserRoles = new ArrayList<>();
187 | sysUserFrom.getSysRoles().forEach(o->{
188 | SysUserRole sysUserRole = new SysUserRole();
189 | sysUserRole.setRoleId(o.getId());
190 | sysUserRole.setUserId(sysUserFrom.getId());
191 | sysUserRoles.add(sysUserRole);
192 | });
193 | List sysUserRolesSave = sysUserRoleRepository.save(sysUserRoles);
194 | log.info("用户角色:sysUserRolesSave = {}"+sysUserRolesSave);
195 | return RUtil.success();
196 | }
197 |
198 | /**
199 | * 删除用户
200 | * @param id
201 | * @return
202 | */
203 | @Override
204 | public R delectUser(Integer id) {
205 | sysUserRoleRepository.deleteByUserId(id);
206 | sysUserRepository.delete(id);
207 | return RUtil.success();
208 | }
209 | }
210 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/utils/Assert.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.utils;
2 |
3 | import com.sherlock.premssion.exception.SystemException;
4 | import org.apache.commons.lang3.StringUtils;
5 |
6 | /**
7 | * 数据校验工具类
8 | * author: 小宇宙
9 | * date: 2018/4/7
10 | */
11 | public class Assert {
12 |
13 | public static void isBlank(String str, String message) {
14 | if (StringUtils.isBlank(str)) {
15 | throw new SystemException(message);
16 | }
17 | }
18 |
19 | public static void isNull(Object object, String message) {
20 | if (object == null) {
21 | throw new SystemException(message);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/utils/JPAUtil.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.utils;
2 |
3 | /**
4 | * author: 小宇宙
5 | * date: 2018/4/7
6 | */
7 | public class JPAUtil {
8 |
9 | public static String like(String column){
10 | StringBuilder sb = new StringBuilder("%"+column+"%");
11 | return sb.toString();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/utils/RUtil.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.utils;
2 |
3 | import com.sherlock.premssion.vo.R;
4 |
5 | /**
6 | * 对象模型工具类
7 | * author: 小宇宙
8 | * date: 2018/4/5
9 | */
10 | public class RUtil {
11 |
12 | public static R success(Object object){
13 | R r = new R();
14 | r.setCode(0);
15 | r.setMsg("ok");
16 | r.setData(object);
17 | return r;
18 | }
19 |
20 | public static R success(){
21 | return success(null);
22 | }
23 |
24 | public static R error(Integer code, String msg){
25 | R r = new R();
26 | r.setCode(code);
27 | r.setMsg(msg);
28 | return r;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/utils/ShiroUtil.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.utils;
2 |
3 | import com.sherlock.premssion.model.SysUser;
4 | import org.apache.shiro.SecurityUtils;
5 | import org.apache.shiro.crypto.SecureRandomNumberGenerator;
6 | import org.apache.shiro.crypto.hash.SimpleHash;
7 | import org.apache.shiro.session.Session;
8 | import org.apache.shiro.subject.Subject;
9 |
10 | /**
11 | * shiro工具
12 | * author: 小宇宙
13 | * date: 2018/4/6
14 | */
15 | public class ShiroUtil {
16 |
17 | /**
18 | * md5加密方式
19 | */
20 | public final static String hashAlgorithmName = "MD5";
21 |
22 | /**
23 | * 加密迭代次数
24 | */
25 | public final static int hashIterations = 10;
26 |
27 | /**
28 | * 基于MD5的加密算法
29 | * @param password
30 | * @param salt
31 | * @return
32 | */
33 | public static String MD5(String password, String salt) {
34 | return new SimpleHash(hashAlgorithmName, password, salt, hashIterations).toHex();
35 | }
36 |
37 |
38 | /**
39 | * 获取当前交互对象
40 | * @return
41 | */
42 | public static Subject getSubject() {
43 | return SecurityUtils.getSubject();
44 | }
45 |
46 | /**
47 | * 获取当前用户对象
48 | * @return
49 | */
50 | public static SysUser getUserEntity() {
51 | return (SysUser)SecurityUtils.getSubject().getPrincipal();
52 | }
53 |
54 | /**
55 | * 获取当前用户id
56 | * @return
57 | */
58 | public static Integer getUserId() {
59 | return getUserEntity().getId();
60 | }
61 |
62 | /**
63 | * 获取当前会话
64 | * @return
65 | */
66 | public static Session getSession() {
67 | return SecurityUtils.getSubject().getSession();
68 | }
69 |
70 | /**
71 | * 设置Session
72 | * @param key
73 | * @param value
74 | */
75 | public static void setSessionAttribute(Object key, Object value) {
76 | getSession().setAttribute(key, value);
77 | }
78 |
79 | /**
80 | * 获取session信息
81 | * @param key
82 | * @return
83 | */
84 | public static Object getSessionAttribute(Object key) {
85 | return getSession().getAttribute(key);
86 | }
87 |
88 | /**
89 | * 判断当前用户是否登录
90 | * @return
91 | */
92 | public static boolean isLogin() {
93 | return SecurityUtils.getSubject().getPrincipal() != null;
94 | }
95 |
96 | /**
97 | * 退出
98 | */
99 | public static void logout() {
100 | SecurityUtils.getSubject().logout();
101 | }
102 |
103 | /**
104 | * 获取随机盐
105 | * @return
106 | */
107 | public static String getSalt(){
108 | return new SecureRandomNumberGenerator().nextBytes().toHex();
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/vo/R.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonInclude;
4 | import lombok.Data;
5 |
6 | /**
7 | * Http返回的对象模型
8 | * author: 小宇宙
9 | * date: 2018/4/5
10 | */
11 | @Data
12 | @JsonInclude(JsonInclude.Include.NON_NULL)
13 | public class R {
14 |
15 | /**
16 | * 状态码
17 | */
18 | private Integer code;
19 |
20 | /**
21 | * 提示信息
22 | */
23 | private String msg;
24 |
25 | /**
26 | * 具体数据
27 | */
28 | private T data;
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/vo/SysRoleVo.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonInclude;
4 | import com.sherlock.premssion.model.SysResource;
5 | import lombok.Data;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * author: 小宇宙
11 | * date: 2018/4/7
12 | */
13 | @Data
14 | @JsonInclude(JsonInclude.Include.NON_NULL)
15 | public class SysRoleVo {
16 |
17 | /**
18 | * 主键id
19 | */
20 | private Integer id;
21 |
22 | /**
23 | * 角色名
24 | */
25 | private String name;
26 |
27 | /**
28 | * 角色等级
29 | */
30 | private Integer grade;
31 |
32 | /**
33 | * 备注
34 | */
35 | private String remark;
36 |
37 | /**
38 | * 拥有资源
39 | */
40 | private List sysResources;
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/sherlock/premssion/vo/SysUserVo.java:
--------------------------------------------------------------------------------
1 | package com.sherlock.premssion.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonInclude;
4 | import com.sherlock.premssion.model.SysRole;
5 | import lombok.Data;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * author: 小宇宙
11 | * date: 2018/4/7
12 | */
13 | @Data
14 | @JsonInclude(JsonInclude.Include.NON_NULL)
15 | public class SysUserVo {
16 |
17 | /**
18 | * 主键id
19 | */
20 | private Integer id;
21 |
22 | /**
23 | * 姓名
24 | */
25 | private String name;
26 |
27 | /**
28 | * 账号
29 | */
30 | private String account;
31 |
32 | /**
33 | * 密码
34 | */
35 | private String password;
36 |
37 | /**
38 | * 是否禁用 0:否;1:是
39 | */
40 | private String forbidden;
41 |
42 | /**
43 | * 用户角色
44 | */
45 | private List sysRoles;
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | spring:
2 | datasource:
3 | driver-class-name: com.mysql.jdbc.Driver
4 | username: root
5 | password: root
6 | url: jdbc:mysql://localhost:3306/premission?characterEncoding=utf-8&useSSL=false
7 | jpa:
8 | show-sql: true
9 | logging:
10 | config:
11 | classpath: logback.xml
--------------------------------------------------------------------------------
/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | %d %p (%file:%line\)- %m%n
5 | UTF-8
6 |
7 |
8 |
10 | logs/sys.log
11 |
12 | logs/sys.%d.%i.log
13 | 30
14 |
15 | 10MB
16 |
17 |
18 |
19 |
20 | %d %p (%file:%line\)- %m%n
21 |
22 | UTF-8
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------