├── .gitignore ├── README.md ├── clouddo-admin ├── clouddo.sql ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── bootdo │ │ │ └── clouddoadmin │ │ │ ├── ClouddoAdminApplication.java │ │ │ ├── config │ │ │ ├── AuthConfig.java │ │ │ └── WebSocketConfig.java │ │ │ ├── constants │ │ │ └── Constants.java │ │ │ ├── controller │ │ │ ├── BaseController.java │ │ │ ├── DeptController.java │ │ │ ├── LoginController.java │ │ │ ├── MenuController.java │ │ │ ├── RoleController.java │ │ │ ├── TestController.java │ │ │ └── UserController.java │ │ │ ├── dao │ │ │ ├── DeptDao.java │ │ │ ├── MenuDao.java │ │ │ ├── RoleDao.java │ │ │ ├── RoleMenuDao.java │ │ │ ├── TokenDao.java │ │ │ ├── TokenPrinciple.java │ │ │ ├── UserDao.java │ │ │ └── UserRoleDao.java │ │ │ ├── domain │ │ │ ├── DeptDO.java │ │ │ ├── MenuDO.java │ │ │ ├── RoleDO.java │ │ │ ├── RoleMenuDO.java │ │ │ ├── TokenDO.java │ │ │ ├── Tree.java │ │ │ ├── UserDO.java │ │ │ └── UserRoleDO.java │ │ │ ├── dto │ │ │ ├── UserDTO.java │ │ │ ├── UserRoleDTO.java │ │ │ └── do2dto │ │ │ │ └── UserConvert.java │ │ │ ├── rpc │ │ │ └── TestRpc.java │ │ │ ├── service │ │ │ ├── DeptService.java │ │ │ ├── MenuService.java │ │ │ ├── RoleService.java │ │ │ ├── TokenService.java │ │ │ ├── UserService.java │ │ │ └── impl │ │ │ │ ├── DeptServiceImpl.java │ │ │ │ ├── MenuServiceImpl.java │ │ │ │ ├── RoleServiceImpl.java │ │ │ │ ├── TokenServiceImpl.java │ │ │ │ └── UserServiceImpl.java │ │ │ ├── task │ │ │ └── DemoTask.java │ │ │ ├── utils │ │ │ ├── BuildTree.java │ │ │ ├── JwtUtils.java │ │ │ ├── MD5Utils.java │ │ │ └── TokenUtils.java │ │ │ └── vo │ │ │ ├── UserToken.java │ │ │ └── UserVO.java │ └── resources │ │ ├── application.yml │ │ ├── mapper │ │ ├── DeptMapper.xml │ │ ├── MenuMapper.xml │ │ ├── RoleMapper.xml │ │ ├── RoleMenuMapper.xml │ │ ├── UserMapper.xml │ │ └── UserRoleMapper.xml │ │ └── spring-ehcache.xml │ └── test │ └── java │ └── com │ └── bootdo │ └── clouddoadmin │ └── ClouddoAdminApplicationTests.java ├── clouddo-base ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── bootdo │ │ │ └── clouddobase │ │ │ ├── ClouddoBaseApplication.java │ │ │ ├── controller │ │ │ └── LogController.java │ │ │ ├── dao │ │ │ └── LogDao.java │ │ │ └── service │ │ │ ├── LogService.java │ │ │ └── impl │ │ │ └── LogServiceImpl.java │ └── resources │ │ ├── application.yml │ │ ├── mapper │ │ └── LogMapper.xml │ │ └── mybatis │ │ └── LogMapper.xml │ └── test │ └── java │ └── com │ └── bootdo │ └── clouddobase │ └── ClouddoLogApplicationTests.java ├── clouddo-cms ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── bootdo │ │ └── clouddocms │ │ ├── ClouddoCmsApplication.java │ │ ├── config │ │ ├── AuthConfig.java │ │ └── WebConfig.java │ │ ├── controller │ │ └── FileController.java │ │ ├── dao │ │ └── FileDao.java │ │ ├── domain │ │ └── FileDO.java │ │ ├── dto │ │ ├── FileDTO.java │ │ └── convert │ │ │ └── FileConvert.java │ │ └── service │ │ ├── FileService.java │ │ └── impl │ │ └── FileServiceImpl.java │ └── resources │ ├── application.yml │ └── mapper │ └── FileMapper.xml ├── clouddo-common ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── bootdo │ │ └── clouddocommon │ │ ├── annotation │ │ └── Log.java │ │ ├── aspect │ │ ├── LogAspect.java │ │ └── WebLogAspect.java │ │ ├── config │ │ └── AsyncConfig.java │ │ ├── constants │ │ └── CommonConstants.java │ │ ├── context │ │ └── FilterContextHandler.java │ │ ├── dto │ │ ├── BTree.java │ │ ├── LogDO.java │ │ ├── LoginDTO.java │ │ ├── LoginUserDTO.java │ │ ├── MenuDTO.java │ │ ├── RouterDTO.java │ │ ├── UserToken.java │ │ └── do2dto │ │ │ └── MenuConvert.java │ │ ├── exception │ │ └── CommonExceptionHandler.java │ │ ├── filter │ │ └── ContextFilter.java │ │ ├── intercepter │ │ ├── AuthIntercepter.java │ │ └── FeignIntercepter.java │ │ ├── service │ │ └── LogRpcService.java │ │ └── utils │ │ ├── FileUtils.java │ │ ├── HttpContextUtils.java │ │ ├── HttpServletUtils.java │ │ ├── IPUtils.java │ │ ├── JSONUtils.java │ │ ├── JwtUtils.java │ │ ├── PageUtils.java │ │ ├── Query.java │ │ ├── R.java │ │ └── StringUtils.java │ └── test │ └── java │ └── com │ └── bootdo │ └── clouddocommon │ └── ClouddoCommonApplicationTests.java ├── clouddo-server ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── bootdo │ │ │ └── clouddoserver │ │ │ └── ClouddoServerApplication.java │ └── resources │ │ └── application.yml │ └── test │ └── java │ └── com │ └── bootdo │ └── clouddoserver │ └── ClouddoServerApplicationTests.java ├── clouddo-zuul ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── bootdo │ │ │ └── clouddozuul │ │ │ ├── ClouddoZuulApplication.java │ │ │ ├── controller │ │ │ └── LoginController.java │ │ │ ├── filter │ │ │ └── AccessFilter.java │ │ │ └── prc │ │ │ └── admin │ │ │ └── MenuService.java │ └── resources │ │ └── application.yml │ └── test │ └── java │ └── com │ └── bootdo │ └── clouddozuul │ └── ClouddoZuulApplicationTests.java └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | /.idea/ 3 | /clouddo.iml 4 | /clouddo-*/clouddo-*.iml 5 | /clouddo-*/mvnw 6 | /clouddo-*/mvnw.cmd 7 | /clouddo-*/.mvn/ 8 | /clouddo-base/mvnw 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### 项目介绍 2 | 3 | clouddo是基于springcloud和vue微服务,前后端分离的后台管理框架,可以作为springcloud和vue的入门学习框架,亦可以作为一个基础脚手架进行二次开发 4 | 5 | ### 使用说明 6 | 7 | 8 | 1.新建数据库,导数数据库脚本(clouddo-admin的根目录下),修改clouddo-admin的数据库用户密码 9 | 10 | 2.启动clouddo-server 注册中心 11 | 12 | 3.启动clouddo-zuul 网关 13 | 14 | 4.启动clouddo-base 基础微服务 15 | 16 | 5.启动clouddo-admin 权限微服务 17 | 18 | 6.启动clouddo-cms 内容管理微服务 19 | 20 | 7.启动前端项目 https://gitee.com/lcg0124/clouddo-view.git 21 | ### 系统截图 22 | ![输入图片说明](https://gitee.com/uploads/images/2018/0525/154945_23b93b75_1204498.png "屏幕截图.png") 23 | -------------------------------------------------------------------------------- /clouddo-admin/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.bootdo 7 | clouddo-admin 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | clouddo-admin 12 | Demo project for Spring Boot 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 2.0.4.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | Finchley.SR1 26 | 1.1.0.Final 27 | 28 | 29 | 30 | 31 | org.springframework.cloud 32 | spring-cloud-starter-netflix-eureka-server 33 | 34 | 35 | 36 | org.springframework.boot 37 | spring-boot-starter-test 38 | test 39 | 40 | 41 | mysql 42 | mysql-connector-java 43 | 44 | 45 | org.mybatis 46 | mybatis 47 | 3.4.4 48 | 49 | 50 | 51 | org.mybatis.spring.boot 52 | mybatis-spring-boot-starter 53 | 1.1.1 54 | 55 | 56 | 57 | org.apache.shiro 58 | shiro-core 59 | 1.3.2 60 | 61 | 62 | 63 | com.alibaba 64 | fastjson 65 | 1.2.42 66 | 67 | 68 | 69 | io.jsonwebtoken 70 | jjwt 71 | 0.7.0 72 | 73 | 74 | 75 | 76 | org.springframework.boot 77 | spring-boot-starter-websocket 78 | 79 | 80 | org.springframework 81 | spring-context-support 82 | 83 | 84 | com.bootdo 85 | clouddo-common 86 | 0.0.1-SNAPSHOT 87 | 88 | 89 | org.springframework.boot 90 | spring-boot-starter-security 91 | 92 | 93 | 94 | net.sf.ehcache 95 | ehcache 96 | 97 | 98 | 99 | 100 | org.mapstruct 101 | mapstruct-jdk8 102 | ${org.mapstruct.version} 103 | 104 | 105 | org.mapstruct 106 | mapstruct 107 | ${org.mapstruct.version} 108 | 109 | 110 | org.mapstruct 111 | mapstruct-processor 112 | ${org.mapstruct.version} 113 | provided 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | org.springframework.cloud 122 | spring-cloud-dependencies 123 | ${spring-cloud.version} 124 | pom 125 | import 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | org.springframework.boot 134 | spring-boot-maven-plugin 135 | 136 | 137 | org.apache.maven.plugins 138 | maven-compiler-plugin 139 | 3.6.1 140 | 141 | 1.8 142 | 1.8 143 | 144 | 145 | org.mapstruct 146 | mapstruct-processor 147 | ${org.mapstruct.version} 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/ClouddoAdminApplication.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; 7 | import org.springframework.cache.annotation.EnableCaching; 8 | import org.springframework.cloud.openfeign.EnableFeignClients; 9 | import org.springframework.scheduling.annotation.EnableScheduling; 10 | 11 | @EnableFeignClients(basePackages = {"com.bootdo"}) 12 | @EnableCaching 13 | @EnableScheduling 14 | @SpringBootApplication(scanBasePackages = {"com.bootdo.clouddoadmin", "com.bootdo.clouddocommon"}) 15 | @EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class}) 16 | public class ClouddoAdminApplication { 17 | 18 | public static void main(String[] args) { 19 | SpringApplication.run(ClouddoAdminApplication.class, args); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/AuthConfig.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.config; 2 | 3 | import com.bootdo.clouddocommon.intercepter.AuthIntercepter; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.web.servlet.config.annotation.InterceptorRegistration; 7 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 8 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 9 | 10 | @Configuration 11 | public class AuthConfig extends WebMvcConfigurerAdapter { 12 | @Bean 13 | public AuthIntercepter authIntercepter() { 14 | return new AuthIntercepter(); 15 | } 16 | 17 | @Override 18 | public void addInterceptors(InterceptorRegistry registry) { 19 | InterceptorRegistration addInterceptor = registry.addInterceptor(authIntercepter()); 20 | 21 | // 排除配置 22 | addInterceptor.excludePathPatterns("/error"); 23 | addInterceptor.excludePathPatterns("/login**"); 24 | addInterceptor.excludePathPatterns("/test**"); 25 | 26 | // 拦截配置 27 | addInterceptor.addPathPatterns("/**"); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/WebSocketConfig.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.config; 2 | 3 | import com.bootdo.clouddoadmin.dao.TokenPrinciple; 4 | import com.bootdo.clouddocommon.utils.JwtUtils; 5 | import org.apache.commons.lang.StringUtils; 6 | import org.apache.shiro.SecurityUtils; 7 | import org.springframework.context.annotation.Configuration; 8 | import org.springframework.http.server.ServerHttpRequest; 9 | import org.springframework.http.server.ServerHttpResponse; 10 | import org.springframework.http.server.ServletServerHttpRequest; 11 | import org.springframework.messaging.Message; 12 | import org.springframework.messaging.MessageChannel; 13 | import org.springframework.messaging.simp.SimpMessageHeaderAccessor; 14 | import org.springframework.messaging.simp.config.ChannelRegistration; 15 | import org.springframework.messaging.simp.config.MessageBrokerRegistry; 16 | import org.springframework.messaging.simp.stomp.StompCommand; 17 | import org.springframework.messaging.simp.stomp.StompHeaderAccessor; 18 | import org.springframework.messaging.support.ChannelInterceptorAdapter; 19 | import org.springframework.messaging.support.MessageHeaderAccessor; 20 | import org.springframework.security.core.context.SecurityContextHolder; 21 | import org.springframework.security.web.csrf.CsrfToken; 22 | import org.springframework.security.web.csrf.DefaultCsrfToken; 23 | import org.springframework.web.socket.WebSocketHandler; 24 | import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; 25 | import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; 26 | import org.springframework.web.socket.config.annotation.StompEndpointRegistry; 27 | import org.springframework.web.socket.server.HandshakeInterceptor; 28 | import org.springframework.web.socket.server.support.DefaultHandshakeHandler; 29 | 30 | import java.security.Principal; 31 | import java.util.Map; 32 | 33 | @Configuration 34 | @EnableWebSocketMessageBroker 35 | public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 36 | 37 | // @Override 38 | // public void registerStompEndpoints(StompEndpointRegistry registry) { //endPoint 注册协议节点,并映射指定的URl 39 | // registry.addEndpoint("/endpointChat").addInterceptors(new HandshakeInterceptor() { 40 | // /** 41 | // * websocket握手 42 | // */ 43 | // @Override 44 | // public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { 45 | // ServletServerHttpRequest req = (ServletServerHttpRequest) request; 46 | // //获取token认证 47 | // String token = req.getServletRequest().getParameter("passcode"); 48 | // System.out.println(token); 49 | // //解析token获取用户信息 50 | // Principal user = parseToken("aaa"); 51 | //// if(token == null){ //如果token认证失败user为null,返回false拒绝握手 52 | //// return false; 53 | //// } 54 | // //保存认证用户 55 | // attributes.put("user", user); 56 | // return true; 57 | // } 58 | // 59 | // @Override 60 | // public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { 61 | // 62 | // } 63 | // }).setHandshakeHandler(new DefaultHandshakeHandler() { 64 | // @Override 65 | // protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map attributes) { 66 | // //设置认证用户 67 | // Principal current = (Principal) attributes.get("user"); 68 | // System.out.println(null==current); 69 | // return current; 70 | // } 71 | // }) 72 | // 73 | // .setAllowedOrigins("*") //允许跨域 74 | // .withSockJS(); //指定使用SockJS协议 75 | // } 76 | //注册STOMP协议节点并映射url 77 | @Override 78 | public void registerStompEndpoints(StompEndpointRegistry registry) { 79 | //添加连接节点 80 | registry.addEndpoint("/endpoint").addInterceptors(new HandshakeInterceptor() { 81 | /** 82 | * websocket握手 83 | */ 84 | @Override 85 | public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { 86 | ServletServerHttpRequest req = (ServletServerHttpRequest) request; 87 | //获取token认证 88 | String token = req.getServletRequest().getParameter("passcode"); 89 | //解析token获取用户信息 90 | Principal user = parseToken("aaa"); 91 | if (user == null) { //如果token认证失败user为null,返回false拒绝握手 92 | return false; 93 | } 94 | //保存认证用户 95 | attributes.put("user", user); 96 | return true; 97 | } 98 | 99 | @Override 100 | public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { 101 | 102 | } 103 | }).setHandshakeHandler(new DefaultHandshakeHandler() { 104 | @Override 105 | protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map attributes) { 106 | //设置认证用户 107 | return (Principal) attributes.get("user"); 108 | } 109 | }) 110 | 111 | .setAllowedOrigins("*") //允许跨域 112 | .withSockJS(); //指定使用SockJS协议 113 | } 114 | 115 | Principal parseToken(String token) { 116 | return new TokenPrinciple(token); 117 | } 118 | 119 | @Override 120 | public void configureMessageBroker(MessageBrokerRegistry registry) {//配置消息代理(message broker) 121 | //点对点式增加一个/queue 消息代理 122 | registry.enableSimpleBroker("/queue", "/topic"); 123 | 124 | } 125 | } -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/constants/Constants.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.constants; 2 | 3 | /** 4 | * @author bootdo 1992lcg@163.com 5 | * @version V1.0 6 | */ 7 | public class Constants { 8 | 9 | public static final String USER_TOKEN_ID = "userId"; 10 | public static final String USER_TOKEN_NAME = "name"; 11 | public static final String JWT_PRIVATE_KEY = "wwwwbootdocom"; 12 | } 13 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/BaseController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.controller; 2 | 3 | import org.springframework.web.bind.annotation.RestController; 4 | 5 | /** 6 | * @author bootdo 1992lcg@163.com 7 | * @version V1.0 8 | */ 9 | @RestController 10 | public class BaseController { 11 | } 12 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/DeptController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.controller; 2 | 3 | import com.bootdo.clouddoadmin.domain.DeptDO; 4 | import com.bootdo.clouddoadmin.domain.Tree; 5 | import com.bootdo.clouddoadmin.service.DeptService; 6 | import com.bootdo.clouddocommon.utils.R; 7 | import org.apache.shiro.authz.annotation.RequiresPermissions; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.ui.Model; 10 | import org.springframework.web.bind.annotation.*; 11 | 12 | import java.util.HashMap; 13 | import java.util.List; 14 | import java.util.Map; 15 | 16 | /** 17 | * 部门管理 18 | * 19 | * @author chglee 20 | * @email 1992lcg@163.com 21 | * @date 2017-09-27 14:40:36 22 | */ 23 | 24 | @RestController 25 | @RequestMapping("/dept") 26 | public class DeptController extends BaseController { 27 | private String prefix = "system/dept"; 28 | @Autowired 29 | private DeptService sysDeptService; 30 | 31 | @GetMapping() 32 | @RequiresPermissions("system:sysDept:sysDept") 33 | String dept() { 34 | return prefix + "/dept"; 35 | } 36 | 37 | @ResponseBody 38 | @GetMapping("/list") 39 | public List list() { 40 | Map query = new HashMap<>(16); 41 | List sysDeptList = sysDeptService.list(query); 42 | return sysDeptList; 43 | } 44 | 45 | @GetMapping("/add/{pId}") 46 | @RequiresPermissions("system:sysDept:add") 47 | String add(@PathVariable("pId") Long pId, Model model) { 48 | model.addAttribute("pId", pId); 49 | if (pId == 0) { 50 | model.addAttribute("pName", "总部门"); 51 | } else { 52 | model.addAttribute("pName", sysDeptService.get(pId).getName()); 53 | } 54 | return prefix + "/add"; 55 | } 56 | 57 | // @GetMapping("/edit/{deptId}") 58 | // @RequiresPermissions("system:sysDept:edit") 59 | // String edit(@PathVariable("deptId") Long deptId, Model model) { 60 | // DeptDO sysDept = sysDeptService.get(deptId); 61 | // model.addAttribute("sysDept", sysDept); 62 | // if(Constant.DEPT_ROOT_ID.equals(sysDept.getParentId())) { 63 | // model.addAttribute("parentDeptName", "无"); 64 | // }else { 65 | // DeptDO parDept = sysDeptService.get(sysDept.getParentId()); 66 | // model.addAttribute("parentDeptName", parDept.getName()); 67 | // } 68 | // return prefix + "/edit"; 69 | // } 70 | 71 | /** 72 | * 保存 73 | */ 74 | @ResponseBody 75 | @PostMapping("/save") 76 | @RequiresPermissions("system:sysDept:add") 77 | public R save(DeptDO sysDept) { 78 | if (sysDeptService.save(sysDept) > 0) { 79 | return R.ok(); 80 | } 81 | return R.error(); 82 | } 83 | 84 | /** 85 | * 修改 86 | */ 87 | @ResponseBody 88 | @RequestMapping("/update") 89 | @RequiresPermissions("system:sysDept:edit") 90 | public R update(DeptDO sysDept) { 91 | if (sysDeptService.update(sysDept) > 0) { 92 | return R.ok(); 93 | } 94 | return R.error(); 95 | } 96 | 97 | /** 98 | * 删除 99 | */ 100 | @PostMapping("/remove") 101 | @ResponseBody 102 | @RequiresPermissions("system:sysDept:remove") 103 | public R remove(Long deptId) { 104 | Map map = new HashMap(); 105 | map.put("parentId", deptId); 106 | if(sysDeptService.count(map)>0) { 107 | return R.error(1, "包含下级部门,不允许修改"); 108 | } 109 | if(sysDeptService.checkDeptHasUser(deptId)) { 110 | if (sysDeptService.remove(deptId) > 0) { 111 | return R.ok(); 112 | } 113 | }else { 114 | return R.error(1, "部门包含用户,不允许修改"); 115 | } 116 | return R.error(); 117 | } 118 | 119 | /** 120 | * 删除 121 | */ 122 | @PostMapping("/batchRemove") 123 | @ResponseBody 124 | @RequiresPermissions("system:sysDept:batchRemove") 125 | public R remove(@RequestParam("ids[]") Long[] deptIds) { 126 | sysDeptService.batchRemove(deptIds); 127 | return R.ok(); 128 | } 129 | 130 | @GetMapping("/tree") 131 | @ResponseBody 132 | public Tree tree() { 133 | Tree tree = sysDeptService.getTree(); 134 | return tree; 135 | } 136 | 137 | @GetMapping("/treeView") 138 | String treeView() { 139 | return prefix + "/deptTree"; 140 | } 141 | 142 | } 143 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/LoginController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.controller; 2 | 3 | import com.bootdo.clouddoadmin.domain.UserDO; 4 | import com.bootdo.clouddoadmin.service.MenuService; 5 | import com.bootdo.clouddoadmin.service.TokenService; 6 | import com.bootdo.clouddoadmin.service.UserService; 7 | import com.bootdo.clouddoadmin.utils.MD5Utils; 8 | import com.bootdo.clouddocommon.annotation.Log; 9 | import com.bootdo.clouddocommon.context.FilterContextHandler; 10 | import com.bootdo.clouddocommon.dto.LoginDTO; 11 | import com.bootdo.clouddocommon.dto.UserToken; 12 | import com.bootdo.clouddocommon.utils.JwtUtils; 13 | import com.bootdo.clouddocommon.utils.R; 14 | import org.springframework.beans.factory.annotation.Autowired; 15 | import org.springframework.web.bind.annotation.*; 16 | 17 | import javax.servlet.http.Cookie; 18 | import javax.servlet.http.HttpServletRequest; 19 | import javax.servlet.http.HttpServletResponse; 20 | import javax.validation.Valid; 21 | import java.util.HashMap; 22 | import java.util.List; 23 | import java.util.Map; 24 | 25 | /** 26 | * @author bootdo 1992lcg@163.com 27 | * @version V1.0 28 | */ 29 | @RequestMapping() 30 | @RestController 31 | public class LoginController { 32 | @Autowired 33 | UserService userService; 34 | @Autowired 35 | TokenService tokenService; 36 | @Autowired 37 | MenuService menuService; 38 | 39 | @Log("登录") 40 | @PostMapping("/login") 41 | R login(@Valid @RequestBody LoginDTO loginDTO, HttpServletRequest request, HttpServletResponse response) { 42 | String username = loginDTO.getUsername().trim(); 43 | String password = loginDTO.getPwd().trim(); 44 | password = MD5Utils.encrypt(username, password); 45 | Map param = new HashMap<>(); 46 | param.put("username", username); 47 | List userDOs = userService.list(param); 48 | if(userDOs.size()<1){ 49 | return R.error("用户或密码错误"); 50 | } 51 | UserDO userDO = userDOs.get(0); 52 | if (null == userDO || !userDO.getPassword().equals(password)) { 53 | return R.error("用户或密码错误"); 54 | } 55 | UserToken userToken = new UserToken(userDO.getUsername(), userDO.getUserId().toString(), userDO.getName()); 56 | String token=""; 57 | try { 58 | token = JwtUtils.generateToken(userToken, 2*60*60*1000); 59 | } catch (Exception e) { 60 | e.printStackTrace(); 61 | } 62 | //首先清除用户缓存权限 63 | menuService.clearCache(userDO.getUserId()); 64 | // String token = tokenService.createToken(userDO.getUserId()); 65 | return R.ok("登录成功") 66 | .put("token", token).put("user",userDO) 67 | .put("perms",menuService.PermsByUserId(userDO.getUserId())) 68 | .put("router",menuService.RouterDTOsByUserId(userDO.getUserId())); 69 | } 70 | 71 | 72 | @RequestMapping("/logout") 73 | R logout(HttpServletRequest request, HttpServletResponse response) { 74 | menuService.clearCache(Long.parseLong(FilterContextHandler.getUserID())); 75 | return R.ok(); 76 | } 77 | 78 | 79 | } 80 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/MenuController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.controller; 2 | 3 | import com.bootdo.clouddoadmin.domain.MenuDO; 4 | import com.bootdo.clouddoadmin.domain.Tree; 5 | import com.bootdo.clouddoadmin.service.MenuService; 6 | import com.bootdo.clouddocommon.annotation.Log; 7 | import com.bootdo.clouddocommon.context.FilterContextHandler; 8 | import com.bootdo.clouddocommon.dto.MenuDTO; 9 | import com.bootdo.clouddocommon.utils.R; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.web.bind.annotation.*; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | import java.util.Map; 16 | 17 | /** 18 | * @author bootdo 1992lcg@163.com 19 | * @version V1.0 20 | */ 21 | @RequestMapping("/menu") 22 | @RestController() 23 | public class MenuController { 24 | @Autowired 25 | MenuService menuService; 26 | 27 | @Log("访问菜单") 28 | @GetMapping("tree") 29 | Tree tree(){ 30 | return menuService.getTree(); 31 | } 32 | @GetMapping 33 | List> list(){ 34 | return menuService.getTree().getChildren(); 35 | } 36 | 37 | @GetMapping("{id}") 38 | MenuDO get(@PathVariable("id") Long id) { 39 | MenuDO menu = menuService.get(id); 40 | return menu; 41 | } 42 | 43 | @GetMapping("list") 44 | List list(@RequestParam Map params) { 45 | List menus = menuService.list(params); 46 | return menus; 47 | } 48 | 49 | @PutMapping() 50 | R update(@RequestBody MenuDO menuDO){ 51 | if(menuService.update(menuDO)>0){ 52 | return R.ok(); 53 | } 54 | return R.error(); 55 | } 56 | @PostMapping 57 | R save(@RequestBody MenuDO menuDO){ 58 | return R.operate(menuService.save(menuDO)>0); 59 | } 60 | 61 | @DeleteMapping() 62 | R remove(Long id){ 63 | if(menuService.remove(id)>0){ 64 | return R.ok(); 65 | } 66 | return R.error(); 67 | } 68 | 69 | @GetMapping("userMenus") 70 | List userMenus(){ 71 | List menuDOS = menuService.userMenus(Long.parseLong(FilterContextHandler.getUserID())); 72 | List menuDTOS = new ArrayList<>(); 73 | for (MenuDO menuDO:menuDOS){ 74 | MenuDTO menuDTO = new MenuDTO(); 75 | menuDTO.setMenuId(menuDO.getMenuId()); 76 | menuDTO.setUrl(menuDO.getUrl()); 77 | menuDTO.setPerms(menuDO.getPerms()); 78 | menuDTOS.add(menuDTO); 79 | } 80 | return menuDTOS; 81 | } 82 | 83 | @GetMapping("clearCache") 84 | R clearCache(){ 85 | Boolean flag = menuService.clearCache(Long.parseLong(FilterContextHandler.getUserID())); 86 | if (flag){ 87 | return R.ok(); 88 | } 89 | return R.error(); 90 | } 91 | 92 | /** 93 | * 当前用户菜单的树形结构 94 | * @return 95 | */ 96 | @RequestMapping("/currentUserMenus") 97 | List> currentUserMenus() { 98 | List> menus = menuService.listMenuTree(Long.parseLong(FilterContextHandler.getUserID())); 99 | return menus; 100 | } 101 | 102 | @GetMapping("/roleId") 103 | List menuIdsByRoleId(Long roleId){ 104 | return menuService.MenuIdsByRoleId(roleId); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/RoleController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.controller; 2 | 3 | import com.bootdo.clouddoadmin.domain.RoleDO; 4 | import com.bootdo.clouddoadmin.domain.UserDO; 5 | import com.bootdo.clouddoadmin.service.RoleService; 6 | import com.bootdo.clouddocommon.utils.PageUtils; 7 | import com.bootdo.clouddocommon.utils.Query; 8 | import com.bootdo.clouddocommon.utils.R; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.web.bind.annotation.*; 11 | 12 | import java.util.List; 13 | import java.util.Map; 14 | 15 | /** 16 | * @author bootdo 17 | * 角色 18 | */ 19 | @RequestMapping("/role") 20 | @RestController 21 | public class RoleController { 22 | @Autowired 23 | RoleService roleService; 24 | 25 | @GetMapping() 26 | PageUtils list(@RequestParam Map params) { 27 | Query query = new Query(params); 28 | List roleDOS = roleService.list(query); 29 | int total = roleService.count(query); 30 | PageUtils pageUtil = new PageUtils(roleDOS, total); 31 | return pageUtil; 32 | } 33 | 34 | @GetMapping("/userId/{userId}") 35 | List roleIdByUserId(@PathVariable Long userId){ 36 | return roleService.RoleIdsByUserId(userId); 37 | } 38 | 39 | @PostMapping 40 | R save(@RequestBody RoleDO roleDO){ 41 | if(roleService.save(roleDO)>0){ 42 | return R.ok(); 43 | } 44 | return R.error(); 45 | } 46 | 47 | @PutMapping 48 | R update(@RequestBody RoleDO roleDO){ 49 | if(roleService.update(roleDO)>0){ 50 | return R.ok(); 51 | } 52 | return R.error(); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/TestController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.controller; 2 | 3 | import com.bootdo.clouddoadmin.rpc.TestRpc; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | @RestController 10 | @RequestMapping 11 | public class TestController { 12 | @Autowired 13 | TestRpc testRpc; 14 | 15 | @GetMapping("test") 16 | String test() { 17 | return testRpc.test(); 18 | } 19 | @GetMapping("test1") 20 | String test1() { 21 | return "1111"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.controller; 2 | 3 | import com.bootdo.clouddoadmin.domain.UserDO; 4 | import com.bootdo.clouddoadmin.dto.UserDTO; 5 | import com.bootdo.clouddoadmin.dto.UserRoleDTO; 6 | import com.bootdo.clouddoadmin.dto.do2dto.UserConvert; 7 | import com.bootdo.clouddoadmin.service.RoleService; 8 | import com.bootdo.clouddoadmin.service.UserService; 9 | import com.bootdo.clouddoadmin.utils.MD5Utils; 10 | import com.bootdo.clouddocommon.annotation.Log; 11 | import com.bootdo.clouddocommon.context.FilterContextHandler; 12 | import com.bootdo.clouddocommon.dto.LoginUserDTO; 13 | import com.bootdo.clouddocommon.utils.PageUtils; 14 | import com.bootdo.clouddocommon.utils.Query; 15 | import com.bootdo.clouddocommon.utils.R; 16 | import org.apache.catalina.servlet4preview.http.HttpServletRequest; 17 | import org.apache.shiro.authz.annotation.RequiresPermissions; 18 | import org.springframework.beans.BeanUtils; 19 | import org.springframework.beans.factory.annotation.Autowired; 20 | import org.springframework.stereotype.Controller; 21 | import org.springframework.ui.Model; 22 | import org.springframework.web.bind.annotation.*; 23 | import org.springframework.web.multipart.MultipartFile; 24 | 25 | import java.util.HashMap; 26 | import java.util.List; 27 | import java.util.Map; 28 | 29 | /** 30 | * 用户信息 31 | * @author bootdo 32 | */ 33 | @RequestMapping("/user") 34 | @RestController 35 | public class UserController extends BaseController { 36 | @Autowired 37 | UserService userService; 38 | @Autowired 39 | RoleService roleService; 40 | 41 | /** 42 | * 登录的当前用户,前台需要验证用户登录的页面可以调用此方法 43 | * @return 44 | */ 45 | @GetMapping("/currentUser") 46 | LoginUserDTO currentUser(){ 47 | LoginUserDTO loginUserDTO = new LoginUserDTO(); 48 | loginUserDTO.setUserId(FilterContextHandler.getUserID()); 49 | loginUserDTO.setUsername(FilterContextHandler.getUsername()); 50 | loginUserDTO.setName(FilterContextHandler.getName()); 51 | return loginUserDTO; 52 | } 53 | 54 | /** 55 | * 根据用户id获取用户 56 | * @param id 57 | * @return 58 | */ 59 | @GetMapping("{id}") 60 | R get(@PathVariable("id") Long id ){ 61 | UserDTO userDTO = UserConvert.MAPPER.do2dto(userService.get(id)); 62 | return R.ok().put("data",userDTO); 63 | } 64 | 65 | /** 66 | * 分页查询用户 67 | * @param params 68 | * @return 69 | */ 70 | @Log("获取用户列表") 71 | @GetMapping() 72 | R listByPage(@RequestParam Map params) { 73 | Query query = new Query(params); 74 | List userDTOS = UserConvert.MAPPER.dos2dtos((userService.list(query))); 75 | int total = userService.count(query); 76 | PageUtils pageUtil = new PageUtils(userDTOS, total); 77 | return R.ok().put("page",pageUtil); 78 | } 79 | 80 | /** 81 | * 增加用户 82 | * @param user 83 | * @return 84 | */ 85 | @PostMapping() 86 | R save(@RequestBody UserDO user) { 87 | user.setPassword(MD5Utils.encrypt(user.getUsername(), user.getPassword())); 88 | return R.operate(userService.save(user) > 0); 89 | } 90 | 91 | /** 92 | * 修改用户 93 | * @param user 94 | * @return 95 | */ 96 | @PutMapping() 97 | R update(@RequestBody UserDO user) { 98 | return R.operate(userService.update(user) > 0); 99 | } 100 | 101 | 102 | /** 103 | * 删除用户 104 | * @param id 105 | * @return 106 | */ 107 | @DeleteMapping() 108 | R remove( Long id) { 109 | return R.operate (userService.remove(id) > 0); 110 | } 111 | 112 | @PostMapping("/batchRemove") 113 | @ResponseBody 114 | R batchRemove(@RequestParam("ids[]") Long[] userIds) { 115 | int r = userService.batchremove(userIds); 116 | if (r > 0) { 117 | return R.ok(); 118 | } 119 | return R.error(); 120 | } 121 | 122 | @PostMapping("/exits") 123 | @ResponseBody 124 | boolean exits(@RequestParam Map params) { 125 | // 存在,不通过,false 126 | return !userService.exits(params); 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/DeptDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import com.bootdo.clouddoadmin.domain.DeptDO; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 部门管理 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2017-10-03 15:35:39 14 | */ 15 | @Mapper 16 | public interface DeptDao { 17 | 18 | DeptDO get(Long deptId); 19 | 20 | List list(Map map); 21 | 22 | int count(Map map); 23 | 24 | int save(DeptDO dept); 25 | 26 | int update(DeptDO dept); 27 | 28 | int remove(Long deptId); 29 | 30 | int batchRemove(Long[] deptIds); 31 | 32 | Long[] listParentDept(); 33 | 34 | int getDeptUserNumber(Long deptId); 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/MenuDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import com.bootdo.clouddoadmin.domain.MenuDO; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 菜单管理 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2017-10-03 09:45:09 14 | */ 15 | @Mapper 16 | public interface MenuDao { 17 | 18 | MenuDO get(Long menuId); 19 | 20 | List list(Map map); 21 | 22 | int count(Map map); 23 | 24 | int save(MenuDO menu); 25 | 26 | int update(MenuDO menu); 27 | 28 | int remove(Long menuId); 29 | 30 | int batchRemove(Long[] menuIds); 31 | 32 | List listMenuByUserId(Long id); 33 | 34 | List listUserPerms(Long id); 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/RoleDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import com.bootdo.clouddoadmin.domain.RoleDO; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 角色 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2017-10-02 20:24:47 14 | */ 15 | @Mapper 16 | public interface RoleDao { 17 | 18 | RoleDO get(Long roleId); 19 | 20 | List list(Map map); 21 | 22 | int count(Map map); 23 | 24 | int save(RoleDO role); 25 | 26 | int update(RoleDO role); 27 | 28 | int remove(Long roleId); 29 | 30 | int batchRemove(Long[] roleIds); 31 | 32 | List roleIdsByUserId(Long userId); 33 | } 34 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/RoleMenuDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import com.bootdo.clouddoadmin.domain.RoleMenuDO; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 角色与菜单对应关系 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2017-10-03 11:08:59 14 | */ 15 | @Mapper 16 | public interface RoleMenuDao { 17 | 18 | RoleMenuDO get(Long id); 19 | 20 | List list(Map map); 21 | 22 | int count(Map map); 23 | 24 | int save(RoleMenuDO roleMenu); 25 | 26 | int update(RoleMenuDO roleMenu); 27 | 28 | int remove(Long id); 29 | 30 | int batchRemove(Long[] ids); 31 | 32 | List listMenuIdByRoleId(Long roleId); 33 | 34 | int removeByRoleId(Long roleId); 35 | 36 | int removeByMenuId(Long menuId); 37 | 38 | int batchSave(List list); 39 | } 40 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/TokenDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import com.bootdo.clouddoadmin.domain.TokenDO; 4 | import org.apache.ibatis.annotations.*; 5 | 6 | /** 7 | * @author bootdo 1992lcg@163.com 8 | * @version V1.0 9 | */ 10 | @Mapper 11 | public interface TokenDao { 12 | /** 13 | * 根据用户id保存token 14 | * @param tokenDO 15 | * @return 16 | */ 17 | @Insert("insert into sys_user_token (user_id,token,expire_time,update_time) values (#{userId},#{token},#{expireTime},#{updateTime})") 18 | int save(TokenDO tokenDO); 19 | 20 | @Select("select * from sys_user_token where token =#{token}") 21 | TokenDO getToken(String token); 22 | 23 | @Delete("delete from sys_user_token where token=#{token}") 24 | boolean removeToken(String token); 25 | 26 | @Select("select * from sys_user_token where user_id =#{userId}") 27 | TokenDO getTokenByUserId(Long userId); 28 | 29 | @Update("update sys_user_token set token=#{token},expire_time=#{expireTime},update_time=#{updateTime} where user_id=#{userId}") 30 | int update(TokenDO tokenDO); 31 | } 32 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/TokenPrinciple.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import java.security.Principal; 4 | 5 | public class TokenPrinciple implements Principal { 6 | private String name; 7 | 8 | public TokenPrinciple(String name) { 9 | setName(name); 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return null; 15 | } 16 | 17 | public void setName(String name) { 18 | this.name = name; 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "TokenPrinciple{" + 24 | "name='" + name + '\'' + 25 | '}'; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/UserDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import com.bootdo.clouddoadmin.domain.UserDO; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2017-10-03 09:45:11 14 | */ 15 | @Mapper 16 | public interface UserDao { 17 | 18 | UserDO get(Long userId); 19 | 20 | List list(Map map); 21 | 22 | int count(Map map); 23 | 24 | int save(UserDO user); 25 | 26 | int update(UserDO user); 27 | 28 | int remove(Long userId); 29 | 30 | int batchRemove(Long[] userIds); 31 | 32 | Long[] listAllDept(); 33 | 34 | } 35 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dao/UserRoleDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dao; 2 | 3 | import com.bootdo.clouddoadmin.domain.UserRoleDO; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 用户与角色对应关系 11 | * 12 | * @author chglee 13 | * @email 1992lcg@163.com 14 | * @date 2017-10-03 11:08:59 15 | */ 16 | @Mapper 17 | public interface UserRoleDao { 18 | 19 | UserRoleDO get(Long id); 20 | 21 | List list(Map map); 22 | 23 | int count(Map map); 24 | 25 | int save(UserRoleDO userRole); 26 | 27 | int update(UserRoleDO userRole); 28 | 29 | int remove(Long id); 30 | 31 | int batchRemove(Long[] ids); 32 | 33 | List listRoleId(Long userId); 34 | 35 | int removeByUserId(Long userId); 36 | 37 | int batchSave(List list); 38 | 39 | int batchRemoveByUserId(Long[] ids); 40 | } 41 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/domain/DeptDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.domain; 2 | 3 | import java.io.Serializable; 4 | 5 | 6 | /** 7 | * 部门管理 8 | * 9 | * @author chglee 10 | * @email 1992lcg@163.com 11 | * @date 2017-09-27 14:28:36 12 | */ 13 | public class DeptDO implements Serializable { 14 | private static final long serialVersionUID = 1L; 15 | 16 | // 17 | private Long deptId; 18 | //上级部门ID,一级部门为0 19 | private Long parentId; 20 | //部门名称 21 | private String name; 22 | //排序 23 | private Integer orderNum; 24 | //是否删除 -1:已删除 0:正常 25 | private Integer delFlag; 26 | 27 | /** 28 | * 设置: 29 | */ 30 | public void setDeptId(Long deptId) { 31 | this.deptId = deptId; 32 | } 33 | /** 34 | * 获取: 35 | */ 36 | public Long getDeptId() { 37 | return deptId; 38 | } 39 | /** 40 | * 设置:上级部门ID,一级部门为0 41 | */ 42 | public void setParentId(Long parentId) { 43 | this.parentId = parentId; 44 | } 45 | /** 46 | * 获取:上级部门ID,一级部门为0 47 | */ 48 | public Long getParentId() { 49 | return parentId; 50 | } 51 | /** 52 | * 设置:部门名称 53 | */ 54 | public void setName(String name) { 55 | this.name = name; 56 | } 57 | /** 58 | * 获取:部门名称 59 | */ 60 | public String getName() { 61 | return name; 62 | } 63 | /** 64 | * 设置:排序 65 | */ 66 | public void setOrderNum(Integer orderNum) { 67 | this.orderNum = orderNum; 68 | } 69 | /** 70 | * 获取:排序 71 | */ 72 | public Integer getOrderNum() { 73 | return orderNum; 74 | } 75 | /** 76 | * 设置:是否删除 -1:已删除 0:正常 77 | */ 78 | public void setDelFlag(Integer delFlag) { 79 | this.delFlag = delFlag; 80 | } 81 | /** 82 | * 获取:是否删除 -1:已删除 0:正常 83 | */ 84 | public Integer getDelFlag() { 85 | return delFlag; 86 | } 87 | 88 | @Override 89 | public String toString() { 90 | return "DeptDO{" + 91 | "deptId=" + deptId + 92 | ", parentId=" + parentId + 93 | ", name='" + name + '\'' + 94 | ", orderNum=" + orderNum + 95 | ", delFlag=" + delFlag + 96 | '}'; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/domain/MenuDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.domain; 2 | 3 | import java.io.Serializable; 4 | import java.util.Date; 5 | 6 | 7 | 8 | /** 9 | * 菜单管理 10 | * 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2018-03-09 15:30:54 14 | */ 15 | public class MenuDO implements Serializable { 16 | private static final long serialVersionUID = 1L; 17 | 18 | // 19 | private String component; 20 | // 21 | private Long menuId; 22 | //父菜单ID,一级菜单为0 23 | private Long parentId; 24 | //菜单名称 25 | private String name; 26 | //菜单URL 27 | private String url; 28 | //授权(多个用逗号分隔,如:user:list,user:create) 29 | private String perms; 30 | //类型 0:目录 1:菜单 2:按钮 31 | private Integer type; 32 | //菜单图标 33 | private String icon; 34 | //排序 35 | private Integer orderNum; 36 | //创建时间 37 | private Date gmtCreate; 38 | //修改时间 39 | private Date gmtModified; 40 | // 41 | private String redirect; 42 | 43 | /** 44 | * 设置: 45 | */ 46 | public void setComponent(String component) { 47 | this.component = component; 48 | } 49 | /** 50 | * 获取: 51 | */ 52 | public String getComponent() { 53 | return component; 54 | } 55 | /** 56 | * 设置: 57 | */ 58 | public void setMenuId(Long menuId) { 59 | this.menuId = menuId; 60 | } 61 | /** 62 | * 获取: 63 | */ 64 | public Long getMenuId() { 65 | return menuId; 66 | } 67 | /** 68 | * 设置:父菜单ID,一级菜单为0 69 | */ 70 | public void setParentId(Long parentId) { 71 | this.parentId = parentId; 72 | } 73 | /** 74 | * 获取:父菜单ID,一级菜单为0 75 | */ 76 | public Long getParentId() { 77 | return parentId; 78 | } 79 | /** 80 | * 设置:菜单名称 81 | */ 82 | public void setName(String name) { 83 | this.name = name; 84 | } 85 | /** 86 | * 获取:菜单名称 87 | */ 88 | public String getName() { 89 | return name; 90 | } 91 | /** 92 | * 设置:菜单URL 93 | */ 94 | public void setUrl(String url) { 95 | this.url = url; 96 | } 97 | /** 98 | * 获取:菜单URL 99 | */ 100 | public String getUrl() { 101 | return url; 102 | } 103 | /** 104 | * 设置:授权(多个用逗号分隔,如:user:list,user:create) 105 | */ 106 | public void setPerms(String perms) { 107 | this.perms = perms; 108 | } 109 | /** 110 | * 获取:授权(多个用逗号分隔,如:user:list,user:create) 111 | */ 112 | public String getPerms() { 113 | return perms; 114 | } 115 | /** 116 | * 设置:类型 0:目录 1:菜单 2:按钮 117 | */ 118 | public void setType(Integer type) { 119 | this.type = type; 120 | } 121 | /** 122 | * 获取:类型 0:目录 1:菜单 2:按钮 123 | */ 124 | public Integer getType() { 125 | return type; 126 | } 127 | /** 128 | * 设置:菜单图标 129 | */ 130 | public void setIcon(String icon) { 131 | this.icon = icon; 132 | } 133 | /** 134 | * 获取:菜单图标 135 | */ 136 | public String getIcon() { 137 | return icon; 138 | } 139 | /** 140 | * 设置:排序 141 | */ 142 | public void setOrderNum(Integer orderNum) { 143 | this.orderNum = orderNum; 144 | } 145 | /** 146 | * 获取:排序 147 | */ 148 | public Integer getOrderNum() { 149 | return orderNum; 150 | } 151 | /** 152 | * 设置:创建时间 153 | */ 154 | public void setGmtCreate(Date gmtCreate) { 155 | this.gmtCreate = gmtCreate; 156 | } 157 | /** 158 | * 获取:创建时间 159 | */ 160 | public Date getGmtCreate() { 161 | return gmtCreate; 162 | } 163 | /** 164 | * 设置:修改时间 165 | */ 166 | public void setGmtModified(Date gmtModified) { 167 | this.gmtModified = gmtModified; 168 | } 169 | /** 170 | * 获取:修改时间 171 | */ 172 | public Date getGmtModified() { 173 | return gmtModified; 174 | } 175 | /** 176 | * 设置: 177 | */ 178 | public void setRedirect(String redirect) { 179 | this.redirect = redirect; 180 | } 181 | /** 182 | * 获取: 183 | */ 184 | public String getRedirect() { 185 | return redirect; 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/domain/RoleDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.domain; 2 | 3 | import java.sql.Timestamp; 4 | import java.util.List; 5 | 6 | public class RoleDO { 7 | 8 | private Long roleId; 9 | private String roleName; 10 | private String roleSign; 11 | private String remark; 12 | private Long userIdCreate; 13 | private Timestamp gmtCreate; 14 | private Timestamp gmtModified; 15 | private List menuIds; 16 | 17 | public Long getRoleId() { 18 | return roleId; 19 | } 20 | 21 | public void setRoleId(Long roleId) { 22 | this.roleId = roleId; 23 | } 24 | 25 | public String getRoleName() { 26 | return roleName; 27 | } 28 | 29 | public void setRoleName(String roleName) { 30 | this.roleName = roleName; 31 | } 32 | 33 | public String getRoleSign() { 34 | return roleSign; 35 | } 36 | 37 | public void setRoleSign(String roleSign) { 38 | this.roleSign = roleSign; 39 | } 40 | 41 | public String getRemark() { 42 | return remark; 43 | } 44 | 45 | public void setRemark(String remark) { 46 | this.remark = remark; 47 | } 48 | 49 | public Long getUserIdCreate() { 50 | return userIdCreate; 51 | } 52 | 53 | public void setUserIdCreate(Long userIdCreate) { 54 | this.userIdCreate = userIdCreate; 55 | } 56 | 57 | public Timestamp getGmtCreate() { 58 | return gmtCreate; 59 | } 60 | 61 | public void setGmtCreate(Timestamp gmtCreate) { 62 | this.gmtCreate = gmtCreate; 63 | } 64 | 65 | public Timestamp getGmtModified() { 66 | return gmtModified; 67 | } 68 | 69 | public void setGmtModified(Timestamp gmtModified) { 70 | this.gmtModified = gmtModified; 71 | } 72 | 73 | public List getMenuIds() { 74 | return menuIds; 75 | } 76 | 77 | public void setMenuIds(List menuIds) { 78 | this.menuIds = menuIds; 79 | } 80 | 81 | @Override 82 | public String toString() { 83 | return "RoleDO{" + 84 | "roleId=" + roleId + 85 | ", roleName='" + roleName + '\'' + 86 | ", roleSign='" + roleSign + '\'' + 87 | ", remark='" + remark + '\'' + 88 | ", userIdCreate=" + userIdCreate + 89 | ", gmtCreate=" + gmtCreate + 90 | ", gmtModified=" + gmtModified + 91 | ", menuIds=" + menuIds + 92 | '}'; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/domain/RoleMenuDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.domain; 2 | 3 | public class RoleMenuDO { 4 | private Long id; 5 | private Long roleId; 6 | private Long menuId; 7 | 8 | public Long getId() { 9 | return id; 10 | } 11 | public void setId(Long id) { 12 | this.id = id; 13 | } 14 | public Long getRoleId() { 15 | return roleId; 16 | } 17 | public void setRoleId(Long roleId) { 18 | this.roleId = roleId; 19 | } 20 | public Long getMenuId() { 21 | return menuId; 22 | } 23 | public void setMenuId(Long menuId) { 24 | this.menuId = menuId; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "RoleMenuDO{" + 30 | "id=" + id + 31 | ", roleId=" + roleId + 32 | ", menuId=" + menuId + 33 | '}'; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/domain/TokenDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.domain; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * @author bootdo 1992lcg@163.com 7 | * @version V1.0 8 | */ 9 | public class TokenDO { 10 | private static final long serialVersionUID = 1L; 11 | 12 | @Override 13 | public String toString() { 14 | return "TokenDO{" + 15 | "userId=" + userId + 16 | ", token='" + token + '\'' + 17 | ", expireTime=" + expireTime + 18 | ", updateTime=" + updateTime + 19 | '}'; 20 | } 21 | 22 | /** 23 | * 用户ID 24 | */ 25 | private Long userId; 26 | /** 27 | * token 28 | */ 29 | private String token; 30 | /** 31 | * 过期时间 32 | */ 33 | private Date expireTime; 34 | /** 35 | * 更新时间 36 | */ 37 | private Date updateTime; 38 | 39 | public Long getUserId() { 40 | return userId; 41 | } 42 | 43 | public void setUserId(Long userId) { 44 | this.userId = userId; 45 | } 46 | 47 | public String getToken() { 48 | return token; 49 | } 50 | 51 | public void setToken(String token) { 52 | this.token = token; 53 | } 54 | 55 | public Date getExpireTime() { 56 | return expireTime; 57 | } 58 | 59 | public void setExpireTime(Date expireTime) { 60 | this.expireTime = expireTime; 61 | } 62 | 63 | public Date getUpdateTime() { 64 | return updateTime; 65 | } 66 | 67 | public void setUpdateTime(Date updateTime) { 68 | this.updateTime = updateTime; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/domain/Tree.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.domain; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.bootdo.clouddocommon.utils.R; 5 | 6 | import java.io.Serializable; 7 | import java.util.*; 8 | 9 | /** 10 | * tree TODO
11 | * 12 | */ 13 | public class Tree { 14 | private static final long serialVersionUID = 1L; 15 | /** 16 | * 节点ID 17 | */ 18 | private String id; 19 | /** 20 | * 显示节点文本 21 | */ 22 | private String text; 23 | /** 24 | * 节点状态,open closed 25 | */ 26 | private Map state; 27 | /** 28 | * 节点是否被选中 true false 29 | */ 30 | private boolean checked = false; 31 | /** 32 | * 节点属性 33 | */ 34 | private Map attributes; 35 | /** 36 | * 节点对象 37 | */ 38 | private Object object; 39 | 40 | /** 41 | * 节点的子节点 42 | */ 43 | private List> children = new ArrayList>(); 44 | 45 | /** 46 | * 父ID 47 | */ 48 | private String parentId; 49 | /** 50 | * 是否有父节点 51 | */ 52 | private boolean hasParent = false; 53 | /** 54 | * 是否有子节点 55 | */ 56 | 57 | private boolean hasChildren = false; 58 | 59 | public String getId() { 60 | return id; 61 | } 62 | 63 | public void setId(String id) { 64 | this.id = id; 65 | } 66 | 67 | public String getText() { 68 | return text; 69 | } 70 | 71 | public void setText(String text) { 72 | this.text = text; 73 | } 74 | 75 | public Map getState() { 76 | return state; 77 | } 78 | 79 | public void setState(Map state) { 80 | this.state = state; 81 | } 82 | 83 | public boolean isChecked() { 84 | return checked; 85 | } 86 | 87 | public void setChecked(boolean checked) { 88 | this.checked = checked; 89 | } 90 | 91 | public Map getAttributes() { 92 | return attributes; 93 | } 94 | 95 | public void setAttributes(Map attributes) { 96 | this.attributes = attributes; 97 | } 98 | 99 | public Object getObject() { 100 | return object; 101 | } 102 | 103 | public void setObject(Object object) { 104 | this.object = object; 105 | } 106 | 107 | public List> getChildren() { 108 | return children; 109 | } 110 | 111 | public void setChildren(List> children) { 112 | this.children = children; 113 | } 114 | 115 | public boolean isHasParent() { 116 | return hasParent; 117 | } 118 | 119 | public void setHasParent(boolean isParent) { 120 | this.hasParent = isParent; 121 | } 122 | 123 | public boolean isHasChildren() { 124 | return hasChildren; 125 | } 126 | 127 | public void setChildren(boolean isChildren) { 128 | this.hasChildren = isChildren; 129 | } 130 | 131 | public String getParentId() { 132 | return parentId; 133 | } 134 | 135 | public void setParentId(String parentId) { 136 | this.parentId = parentId; 137 | } 138 | 139 | public Tree(String id, String text, Map state, boolean checked, Map attributes,Object object, 140 | List> children, boolean isParent, boolean isChildren, String parentID) { 141 | super(); 142 | this.id = id; 143 | this.text = text; 144 | this.state = state; 145 | this.checked = checked; 146 | this.attributes = attributes; 147 | this.setObject(object); 148 | this.children = children; 149 | this.hasParent = isParent; 150 | this.hasChildren = isChildren; 151 | this.parentId = parentID; 152 | } 153 | public Tree() { 154 | super(); 155 | } 156 | } -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/domain/UserRoleDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.domain; 2 | 3 | public class UserRoleDO { 4 | private Long id; 5 | private Long userId; 6 | private Long roleId; 7 | 8 | public Long getId() { 9 | return id; 10 | } 11 | 12 | public void setId(Long id) { 13 | this.id = id; 14 | } 15 | 16 | public Long getUserId() { 17 | return userId; 18 | } 19 | 20 | public void setUserId(Long userId) { 21 | this.userId = userId; 22 | } 23 | 24 | public Long getRoleId() { 25 | return roleId; 26 | } 27 | 28 | public void setRoleId(Long roleId) { 29 | this.roleId = roleId; 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return "UserRoleDO{" + 35 | "id=" + id + 36 | ", userId=" + userId + 37 | ", roleId=" + roleId + 38 | '}'; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dto/UserDTO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dto; 2 | 3 | import java.util.Date; 4 | import java.util.List; 5 | 6 | public class UserDTO { 7 | // 8 | private Long userId; 9 | // 用户名 10 | private String username; 11 | // 用户真实姓名 12 | private String name; 13 | 14 | // 部门 15 | private Long deptId; 16 | 17 | private String deptName; 18 | // 邮箱 19 | private String email; 20 | // 手机号 21 | private String mobile; 22 | // 状态 0:禁用,1:正常 23 | private Integer status; 24 | // 创建用户id 25 | private Long userIdCreate; 26 | // 创建时间 27 | private Date gmtCreate; 28 | // 修改时间 29 | private Date gmtModified; 30 | //角色 31 | private List roleIds; 32 | //性别 33 | private Long sex; 34 | 35 | private Date birth; 36 | //图片ID 37 | private Long picId; 38 | //现居住地 39 | private String liveAddress; 40 | //爱好 41 | private String hobby; 42 | //省份 43 | private String province; 44 | //所在城市 45 | private String city; 46 | //所在地区 47 | private String district; 48 | 49 | public Long getUserId() { 50 | return userId; 51 | } 52 | 53 | public void setUserId(Long userId) { 54 | this.userId = userId; 55 | } 56 | 57 | public String getUsername() { 58 | return username; 59 | } 60 | 61 | public void setUsername(String username) { 62 | this.username = username; 63 | } 64 | 65 | public String getName() { 66 | return name; 67 | } 68 | 69 | public void setName(String name) { 70 | this.name = name; 71 | } 72 | 73 | public Long getDeptId() { 74 | return deptId; 75 | } 76 | 77 | public void setDeptId(Long deptId) { 78 | this.deptId = deptId; 79 | } 80 | 81 | public String getDeptName() { 82 | return deptName; 83 | } 84 | 85 | public void setDeptName(String deptName) { 86 | this.deptName = deptName; 87 | } 88 | 89 | public String getEmail() { 90 | return email; 91 | } 92 | 93 | public void setEmail(String email) { 94 | this.email = email; 95 | } 96 | 97 | public String getMobile() { 98 | return mobile; 99 | } 100 | 101 | public void setMobile(String mobile) { 102 | this.mobile = mobile; 103 | } 104 | 105 | public Integer getStatus() { 106 | return status; 107 | } 108 | 109 | public void setStatus(Integer status) { 110 | this.status = status; 111 | } 112 | 113 | public Long getUserIdCreate() { 114 | return userIdCreate; 115 | } 116 | 117 | public void setUserIdCreate(Long userIdCreate) { 118 | this.userIdCreate = userIdCreate; 119 | } 120 | 121 | public Date getGmtCreate() { 122 | return gmtCreate; 123 | } 124 | 125 | public void setGmtCreate(Date gmtCreate) { 126 | this.gmtCreate = gmtCreate; 127 | } 128 | 129 | public Date getGmtModified() { 130 | return gmtModified; 131 | } 132 | 133 | public void setGmtModified(Date gmtModified) { 134 | this.gmtModified = gmtModified; 135 | } 136 | 137 | public List getRoleIds() { 138 | return roleIds; 139 | } 140 | 141 | public void setRoleIds(List roleIds) { 142 | this.roleIds = roleIds; 143 | } 144 | 145 | public Long getSex() { 146 | return sex; 147 | } 148 | 149 | public void setSex(Long sex) { 150 | this.sex = sex; 151 | } 152 | 153 | public Date getBirth() { 154 | return birth; 155 | } 156 | 157 | public void setBirth(Date birth) { 158 | this.birth = birth; 159 | } 160 | 161 | public Long getPicId() { 162 | return picId; 163 | } 164 | 165 | public void setPicId(Long picId) { 166 | this.picId = picId; 167 | } 168 | 169 | public String getLiveAddress() { 170 | return liveAddress; 171 | } 172 | 173 | public void setLiveAddress(String liveAddress) { 174 | this.liveAddress = liveAddress; 175 | } 176 | 177 | public String getHobby() { 178 | return hobby; 179 | } 180 | 181 | public void setHobby(String hobby) { 182 | this.hobby = hobby; 183 | } 184 | 185 | public String getProvince() { 186 | return province; 187 | } 188 | 189 | public void setProvince(String province) { 190 | this.province = province; 191 | } 192 | 193 | public String getCity() { 194 | return city; 195 | } 196 | 197 | public void setCity(String city) { 198 | this.city = city; 199 | } 200 | 201 | public String getDistrict() { 202 | return district; 203 | } 204 | 205 | public void setDistrict(String district) { 206 | this.district = district; 207 | } 208 | } 209 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dto/UserRoleDTO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dto; 2 | 3 | /** 4 | * 用户角色 5 | * @author bootdo 1992lcg@163.com 6 | */ 7 | public class UserRoleDTO { 8 | public Long getId() { 9 | return id; 10 | } 11 | 12 | public void setId(Long id) { 13 | this.id = id; 14 | } 15 | 16 | public String getName() { 17 | return name; 18 | } 19 | 20 | public void setName(String name) { 21 | this.name = name; 22 | } 23 | 24 | public boolean isChecked() { 25 | return checked; 26 | } 27 | 28 | public void setChecked(boolean checked) { 29 | this.checked = checked; 30 | } 31 | 32 | private Long id; 33 | private String name; 34 | private boolean checked; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/dto/do2dto/UserConvert.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.dto.do2dto; 2 | 3 | 4 | import com.bootdo.clouddoadmin.domain.UserDO; 5 | import com.bootdo.clouddoadmin.dto.UserDTO; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | import java.util.List; 9 | 10 | @org.mapstruct.Mapper 11 | public interface UserConvert { 12 | UserConvert MAPPER = Mappers.getMapper(UserConvert.class); 13 | 14 | public UserDTO do2dto(UserDO person); 15 | 16 | public List dos2dtos(List list); 17 | } 18 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/rpc/TestRpc.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.rpc; 2 | 3 | import com.bootdo.clouddocommon.intercepter.FeignIntercepter; 4 | import org.springframework.cloud.openfeign.FeignClient; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | 7 | @FeignClient(name = "course", configuration = FeignIntercepter.class) 8 | public interface TestRpc { 9 | @GetMapping("/test/testRpc/test") 10 | String test(); 11 | } 12 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/DeptService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service; 2 | 3 | import com.bootdo.clouddoadmin.domain.Tree; 4 | import com.bootdo.clouddoadmin.domain.DeptDO; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 部门管理 11 | * 12 | * @author chglee 13 | * @email 1992lcg@163.com 14 | * @date 2017-09-27 14:28:36 15 | */ 16 | public interface DeptService { 17 | 18 | DeptDO get(Long deptId); 19 | 20 | List list(Map map); 21 | 22 | int count(Map map); 23 | 24 | int save(DeptDO sysDept); 25 | 26 | int update(DeptDO sysDept); 27 | 28 | int remove(Long deptId); 29 | 30 | int batchRemove(Long[] deptIds); 31 | 32 | Tree getTree(); 33 | 34 | boolean checkDeptHasUser(Long deptId); 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/MenuService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service; 2 | 3 | import com.bootdo.clouddoadmin.domain.Tree; 4 | import com.bootdo.clouddoadmin.domain.MenuDO; 5 | import com.bootdo.clouddocommon.dto.RouterDTO; 6 | import com.bootdo.clouddocommon.utils.R; 7 | import org.springframework.cache.annotation.CacheEvict; 8 | import org.springframework.stereotype.Service; 9 | 10 | import java.util.List; 11 | import java.util.Map; 12 | import java.util.Set; 13 | 14 | @Service 15 | public interface MenuService { 16 | Tree getSysMenuTree(Long id); 17 | 18 | /** 19 | * 登录用户的权限 20 | * @author bootdo 1992lcg@163.com 21 | * @param userId 22 | * @return 23 | */ 24 | List userMenus(Long userId); 25 | 26 | List> listMenuTree(Long id); 27 | 28 | Tree getTree(); 29 | 30 | Tree getTree(Long id); 31 | 32 | @CacheEvict(value = "permission",key = "#userId") 33 | boolean clearCache(Long userId); 34 | 35 | List list(Map params); 36 | 37 | int remove(Long id); 38 | 39 | int save(MenuDO menu); 40 | 41 | int update(MenuDO menu); 42 | 43 | MenuDO get(Long id); 44 | 45 | Set listPerms(Long userId); 46 | 47 | /** 48 | * 获取角色下的权限所有id 49 | * @param roleId 50 | * @return 51 | */ 52 | List MenuIdsByRoleId(Long roleId); 53 | 54 | /** 55 | * 用户的路由 56 | * @return 57 | */ 58 | List RouterDTOsByUserId(Long userId); 59 | /** 60 | * 用户权限 61 | */ 62 | List PermsByUserId(Long userId); 63 | } 64 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/RoleService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service; 2 | 3 | import com.bootdo.clouddoadmin.domain.RoleDO; 4 | import com.bootdo.clouddoadmin.dto.UserRoleDTO; 5 | import org.springframework.stereotype.Service; 6 | 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | @Service 11 | public interface RoleService { 12 | 13 | RoleDO get(Long id); 14 | 15 | List list(Map map); 16 | 17 | int count(Map map); 18 | 19 | int save(RoleDO role); 20 | 21 | int update(RoleDO role); 22 | 23 | int remove(Long id); 24 | 25 | List list(Long userId); 26 | 27 | int batchremove(Long[] ids); 28 | 29 | /** 30 | * 获取用户的角色id 31 | * @param userId 32 | * @return 角色id 33 | */ 34 | List RoleIdsByUserId(Long userId); 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/TokenService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service; 2 | 3 | import org.springframework.stereotype.Service; 4 | 5 | /** 6 | * @author bootdo 1992lcg@163.com 7 | */ 8 | @Service 9 | public interface TokenService { 10 | /** 11 | * 根据用户id生成token持久化 12 | */ 13 | String createToken(Long userId); 14 | 15 | Long getUserIdByToken(String token); 16 | 17 | boolean removeToken(String token); 18 | } 19 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service; 2 | 3 | import com.bootdo.clouddoadmin.domain.Tree; 4 | import com.bootdo.clouddoadmin.domain.DeptDO; 5 | import com.bootdo.clouddoadmin.domain.UserDO; 6 | import com.bootdo.clouddoadmin.vo.UserVO; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.web.multipart.MultipartFile; 9 | 10 | import java.util.List; 11 | import java.util.Map; 12 | import java.util.Set; 13 | 14 | @Service 15 | public interface UserService { 16 | UserDO get(Long id); 17 | 18 | List list(Map map); 19 | 20 | int count(Map map); 21 | 22 | int save(UserDO user); 23 | 24 | int update(UserDO user); 25 | 26 | int remove(Long userId); 27 | 28 | int batchremove(Long[] userIds); 29 | 30 | boolean exits(Map params); 31 | 32 | Set listRoles(Long userId); 33 | 34 | int resetPwd(UserVO userVO, UserDO userDO) throws Exception; 35 | int adminResetPwd(UserVO userVO) throws Exception; 36 | Tree getTree(); 37 | 38 | /** 39 | * 更新个人信息 40 | * @param userDO 41 | * @return 42 | */ 43 | int updatePersonal(UserDO userDO); 44 | 45 | /** 46 | * 更新个人图片 47 | * @param file 图片 48 | * @param avatar_data 裁剪信息 49 | * @param userId 用户ID 50 | * @throws Exception 51 | */ 52 | Map updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception; 53 | } 54 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/DeptServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service.impl; 2 | 3 | import com.bootdo.clouddoadmin.domain.Tree; 4 | import com.bootdo.clouddoadmin.utils.BuildTree; 5 | import com.bootdo.clouddoadmin.dao.DeptDao; 6 | import com.bootdo.clouddoadmin.domain.DeptDO; 7 | import com.bootdo.clouddoadmin.service.DeptService; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.ArrayList; 12 | import java.util.HashMap; 13 | import java.util.List; 14 | import java.util.Map; 15 | 16 | 17 | @Service 18 | public class DeptServiceImpl implements DeptService { 19 | @Autowired 20 | private DeptDao sysDeptMapper; 21 | 22 | @Override 23 | public DeptDO get(Long deptId){ 24 | return sysDeptMapper.get(deptId); 25 | } 26 | 27 | @Override 28 | public List list(Map map){ 29 | return sysDeptMapper.list(map); 30 | } 31 | 32 | @Override 33 | public int count(Map map){ 34 | return sysDeptMapper.count(map); 35 | } 36 | 37 | @Override 38 | public int save(DeptDO sysDept){ 39 | return sysDeptMapper.save(sysDept); 40 | } 41 | 42 | @Override 43 | public int update(DeptDO sysDept){ 44 | return sysDeptMapper.update(sysDept); 45 | } 46 | 47 | @Override 48 | public int remove(Long deptId){ 49 | return sysDeptMapper.remove(deptId); 50 | } 51 | 52 | @Override 53 | public int batchRemove(Long[] deptIds){ 54 | return sysDeptMapper.batchRemove(deptIds); 55 | } 56 | 57 | @Override 58 | public Tree getTree() { 59 | List> trees = new ArrayList>(); 60 | List sysDepts = sysDeptMapper.list(new HashMap(16)); 61 | for (DeptDO sysDept : sysDepts) { 62 | Tree tree = new Tree(); 63 | tree.setId(sysDept.getDeptId().toString()); 64 | tree.setParentId(sysDept.getParentId().toString()); 65 | tree.setText(sysDept.getName()); 66 | Map state = new HashMap<>(16); 67 | state.put("opened", true); 68 | tree.setState(state); 69 | trees.add(tree); 70 | } 71 | // 默认顶级菜单为0,根据数据库实际情况调整 72 | Tree t = BuildTree.build(trees); 73 | return t; 74 | } 75 | 76 | @Override 77 | public boolean checkDeptHasUser(Long deptId) { 78 | // TODO Auto-generated method stub 79 | //查询部门以及此部门的下级部门 80 | int result = sysDeptMapper.getDeptUserNumber(deptId); 81 | return result==0?true:false; 82 | } 83 | 84 | } 85 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/RoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service.impl; 2 | 3 | import com.bootdo.clouddoadmin.dao.RoleDao; 4 | import com.bootdo.clouddoadmin.dao.RoleMenuDao; 5 | import com.bootdo.clouddoadmin.dao.UserDao; 6 | import com.bootdo.clouddoadmin.dao.UserRoleDao; 7 | import com.bootdo.clouddoadmin.domain.RoleDO; 8 | import com.bootdo.clouddoadmin.domain.RoleMenuDO; 9 | import com.bootdo.clouddoadmin.dto.UserRoleDTO; 10 | import com.bootdo.clouddoadmin.service.RoleService; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.cache.annotation.CacheEvict; 13 | import org.springframework.cache.annotation.Cacheable; 14 | import org.springframework.stereotype.Service; 15 | import org.springframework.transaction.annotation.Transactional; 16 | 17 | import java.util.*; 18 | 19 | 20 | @Service 21 | public class RoleServiceImpl implements RoleService { 22 | 23 | public static final String ROLE_ALL_KEY = "\"role_all\""; 24 | 25 | public static final String DEMO_CACHE_NAME = "role"; 26 | 27 | @Autowired 28 | RoleDao roleMapper; 29 | @Autowired 30 | RoleMenuDao roleMenuMapper; 31 | @Autowired 32 | UserDao userMapper; 33 | @Autowired 34 | UserRoleDao userRoleMapper; 35 | 36 | @Override 37 | public List list(Map map) { 38 | List roles = roleMapper.list(map); 39 | return roles; 40 | } 41 | 42 | @Override 43 | public int count(Map map) { 44 | return roleMapper.count(map); 45 | } 46 | 47 | 48 | @Override 49 | public List list(Long userId) { 50 | List rolesIds = userRoleMapper.listRoleId(userId); 51 | List roles = roleMapper.list(new HashMap<>(16)); 52 | List roleDTOS = new ArrayList<>(); 53 | for (RoleDO roleDO : roles) { 54 | UserRoleDTO userRoleDTO = new UserRoleDTO(); 55 | userRoleDTO.setId(roleDO.getRoleId()); 56 | userRoleDTO.setName(roleDO.getRoleName()); 57 | userRoleDTO.setChecked(false); 58 | for (Long roleId : rolesIds) { 59 | if (Objects.equals(roleDO.getRoleId(), roleId)) { 60 | // roleDO.setRoleSign("true"); 61 | userRoleDTO.setChecked(true); 62 | break; 63 | } 64 | } 65 | roleDTOS.add(userRoleDTO); 66 | } 67 | return roleDTOS; 68 | } 69 | 70 | @CacheEvict(value = DEMO_CACHE_NAME, key = ROLE_ALL_KEY) 71 | @Transactional 72 | @Override 73 | public int save(RoleDO role) { 74 | int count = roleMapper.save(role); 75 | List menuIds = role.getMenuIds(); 76 | Long roleId = role.getRoleId(); 77 | List rms = new ArrayList<>(); 78 | for (Long menuId : menuIds) { 79 | RoleMenuDO rmDo = new RoleMenuDO(); 80 | rmDo.setRoleId(roleId); 81 | rmDo.setMenuId(menuId); 82 | rms.add(rmDo); 83 | } 84 | roleMenuMapper.removeByRoleId(roleId); 85 | if (rms.size() > 0) { 86 | roleMenuMapper.batchSave(rms); 87 | } 88 | return count; 89 | } 90 | 91 | @Transactional 92 | @Override 93 | public int remove(Long id) { 94 | int count = roleMapper.remove(id); 95 | roleMenuMapper.removeByRoleId(id); 96 | return count; 97 | } 98 | 99 | @Override 100 | public RoleDO get(Long id) { 101 | RoleDO roleDO = roleMapper.get(id); 102 | return roleDO; 103 | } 104 | 105 | @Override 106 | public int update(RoleDO role) { 107 | int r = roleMapper.update(role); 108 | List menuIds = role.getMenuIds(); 109 | if(null!=menuIds){ 110 | Long roleId = role.getRoleId(); 111 | roleMenuMapper.removeByRoleId(roleId); 112 | List rms = new ArrayList<>(); 113 | for (Long menuId : menuIds) { 114 | RoleMenuDO rmDo = new RoleMenuDO(); 115 | rmDo.setRoleId(roleId); 116 | rmDo.setMenuId(menuId); 117 | rms.add(rmDo); 118 | } 119 | if (rms.size() > 0) { 120 | roleMenuMapper.batchSave(rms); 121 | } 122 | } 123 | return r; 124 | } 125 | 126 | @Override 127 | public int batchremove(Long[] ids) { 128 | int r = roleMapper.batchRemove(ids); 129 | return r; 130 | } 131 | 132 | /** 133 | * 获取用户的角色id 134 | * 135 | * @param userId 136 | * @return 角色id 137 | */ 138 | @Override 139 | public List RoleIdsByUserId(Long userId) { 140 | return roleMapper.roleIdsByUserId(userId); 141 | } 142 | 143 | } 144 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/TokenServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.service.impl; 2 | 3 | import com.bootdo.clouddoadmin.dao.TokenDao; 4 | import com.bootdo.clouddoadmin.domain.TokenDO; 5 | import com.bootdo.clouddoadmin.service.TokenService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.util.Date; 10 | import java.util.UUID; 11 | 12 | /** 13 | * @author bootdo 1992lcg@163.com 14 | * @version V1.0 15 | */ 16 | @Service 17 | public class TokenServiceImpl implements TokenService { 18 | @Autowired 19 | TokenDao tokenDao; 20 | //过期时间,单位s 21 | private final static int EXPIRE = 60*30; 22 | @Override 23 | public String createToken(Long userId) { 24 | //当前时间 25 | Date now = new Date(); 26 | //过期时间 27 | Date expireTime = new Date(now.getTime()+EXPIRE*1000); 28 | TokenDO tokenDO = new TokenDO(); 29 | tokenDO.setUserId(userId); 30 | tokenDO.setUpdateTime(now); 31 | tokenDO.setToken(UUID.randomUUID().toString()); 32 | tokenDO.setExpireTime(expireTime); 33 | if(tokenDao.getTokenByUserId(userId)!=null){ 34 | tokenDao.update(tokenDO); 35 | }else{ 36 | tokenDao.save(tokenDO); 37 | } 38 | 39 | return tokenDO.getToken(); 40 | } 41 | 42 | @Override 43 | public Long getUserIdByToken(String token) { 44 | TokenDO tokenDO = tokenDao.getToken(token); 45 | if (tokenDO==null){ 46 | return -1L; 47 | }else { 48 | if (tokenDO.getExpireTime().getTime() roleIds = userRoleMapper.listRoleId(id); 44 | UserDO user = userMapper.get(id); 45 | user.setDeptName(deptMapper.get(user.getDeptId()).getName()); 46 | user.setroleIds(roleIds); 47 | return user; 48 | } 49 | 50 | @Override 51 | public List list(Map map) { 52 | return userMapper.list(map); 53 | } 54 | 55 | @Override 56 | public int count(Map map) { 57 | return userMapper.count(map); 58 | } 59 | 60 | @Override 61 | public int save(UserDO user) { 62 | int count = userMapper.save(user); 63 | Long userId = user.getUserId(); 64 | List roles = user.getroleIds(); 65 | userRoleMapper.removeByUserId(userId); 66 | List list = new ArrayList<>(); 67 | for (Long roleId : roles) { 68 | UserRoleDO ur = new UserRoleDO(); 69 | ur.setUserId(userId); 70 | ur.setRoleId(roleId); 71 | list.add(ur); 72 | } 73 | if (list.size() > 0) { 74 | userRoleMapper.batchSave(list); 75 | } 76 | return count; 77 | } 78 | 79 | @Override 80 | public int update(UserDO user) { 81 | int r = userMapper.update(user); 82 | Long userId = user.getUserId(); 83 | List roles = user.getroleIds(); 84 | if(null!=roles){ 85 | userRoleMapper.removeByUserId(userId); 86 | List list = new ArrayList<>(); 87 | for (Long roleId : roles) { 88 | UserRoleDO ur = new UserRoleDO(); 89 | ur.setUserId(userId); 90 | ur.setRoleId(roleId); 91 | list.add(ur); 92 | } 93 | if (list.size() > 0) { 94 | userRoleMapper.batchSave(list); 95 | } 96 | } 97 | return r; 98 | } 99 | 100 | @Override 101 | public int remove(Long userId) { 102 | userRoleMapper.removeByUserId(userId); 103 | return userMapper.remove(userId); 104 | } 105 | 106 | @Override 107 | public boolean exits(Map params) { 108 | boolean exits = userMapper.list(params).size() > 0; 109 | return exits; 110 | } 111 | 112 | @Override 113 | public Set listRoles(Long userId) { 114 | return null; 115 | } 116 | 117 | @Override 118 | public int resetPwd(UserVO userVO,UserDO userDO) throws Exception { 119 | if(Objects.equals(userVO.getUserDO().getUserId(),userDO.getUserId())){ 120 | if(Objects.equals(MD5Utils.encrypt(userDO.getUsername(),userVO.getPwdOld()),userDO.getPassword())){ 121 | userDO.setPassword(MD5Utils.encrypt(userDO.getUsername(),userVO.getPwdNew())); 122 | return userMapper.update(userDO); 123 | }else{ 124 | throw new Exception("输入的旧密码有误!"); 125 | } 126 | }else{ 127 | throw new Exception("你修改的不是你登录的账号!"); 128 | } 129 | } 130 | @Override 131 | public int adminResetPwd(UserVO userVO) throws Exception { 132 | UserDO userDO =get(userVO.getUserDO().getUserId()); 133 | if("admin".equals(userDO.getUsername())){ 134 | throw new Exception("超级管理员的账号不允许直接重置!"); 135 | } 136 | userDO.setPassword(MD5Utils.encrypt(userDO.getUsername(), userVO.getPwdNew())); 137 | return userMapper.update(userDO); 138 | 139 | 140 | } 141 | 142 | @Transactional 143 | @Override 144 | public int batchremove(Long[] userIds) { 145 | int count = userMapper.batchRemove(userIds); 146 | userRoleMapper.batchRemoveByUserId(userIds); 147 | return count; 148 | } 149 | 150 | @Override 151 | public Tree getTree() { 152 | List> trees = new ArrayList>(); 153 | List depts = deptMapper.list(new HashMap(16)); 154 | Long[] pDepts = deptMapper.listParentDept(); 155 | Long[] uDepts = userMapper.listAllDept(); 156 | Long[] allDepts = (Long[]) ArrayUtils.addAll(pDepts, uDepts); 157 | for (DeptDO dept : depts) { 158 | if (!ArrayUtils.contains(allDepts, dept.getDeptId())) { 159 | continue; 160 | } 161 | Tree tree = new Tree(); 162 | tree.setId(dept.getDeptId().toString()); 163 | tree.setParentId(dept.getParentId().toString()); 164 | tree.setText(dept.getName()); 165 | Map state = new HashMap<>(16); 166 | state.put("opened", true); 167 | state.put("mType", "dept"); 168 | tree.setState(state); 169 | trees.add(tree); 170 | } 171 | List users = userMapper.list(new HashMap(16)); 172 | for (UserDO user : users) { 173 | Tree tree = new Tree(); 174 | tree.setId(user.getUserId().toString()); 175 | tree.setParentId(user.getDeptId().toString()); 176 | tree.setText(user.getName()); 177 | Map state = new HashMap<>(16); 178 | state.put("opened", true); 179 | state.put("mType", "user"); 180 | tree.setState(state); 181 | trees.add(tree); 182 | } 183 | // 默认顶级菜单为0,根据数据库实际情况调整 184 | Tree t = BuildTree.build(trees); 185 | return t; 186 | } 187 | 188 | @Override 189 | public int updatePersonal(UserDO userDO) { 190 | return userMapper.update(userDO); 191 | } 192 | 193 | @Override 194 | public Map updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception { 195 | return null; 196 | } 197 | 198 | 199 | } 200 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/task/DemoTask.java: -------------------------------------------------------------------------------- 1 | //package com.bootdo.clouddoadmin.task; 2 | // 3 | //import com.bootdo.clouddoadmin.dao.TokenPrinciple; 4 | //import com.bootdo.clouddoadmin.dto.Response; 5 | //import org.slf4j.Logger; 6 | //import org.slf4j.LoggerFactory; 7 | //import org.springframework.beans.factory.annotation.Autowired; 8 | //import org.springframework.messaging.simp.SimpMessagingTemplate; 9 | //import org.springframework.scheduling.annotation.Scheduled; 10 | //import org.springframework.stereotype.Component; 11 | // 12 | //@Component 13 | //public class DemoTask { 14 | // @Autowired 15 | // SimpMessagingTemplate template; 16 | // 17 | // private static final Logger logger = LoggerFactory.getLogger(DemoTask.class); 18 | // 19 | // @Scheduled(cron = "0/4 * * * * ? ") 20 | // public void TestSocket() { 21 | // logger.info("-----socket testing!!!"); 22 | //// template.convertAndSendToUser(new TokenPrinciple("aaa").toString() 23 | //// , "/queue/notifications", "新消息:" + "给aaa的消息"); 24 | // 25 | // template.convertAndSend("/topic/getResponse", new Response("欢迎体验bootdo,这是一个任务计划,使用了websocket和quzrtz技术,可以在计划列表中取消,欢迎您加入qq群交流学习!")); 26 | // } 27 | //} 28 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/utils/BuildTree.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.utils; 2 | 3 | import com.bootdo.clouddoadmin.domain.Tree; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashMap; 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | public class BuildTree { 11 | public static Tree build(List> nodes) { 12 | if (nodes == null) { 13 | return null; 14 | } 15 | List> topNodes = new ArrayList>(); 16 | for (Tree child : nodes) { 17 | String pid = child.getParentId(); 18 | if (pid == null || "0".equals(pid)) { 19 | topNodes.add(child); 20 | continue; 21 | } 22 | for (Tree parent : nodes) { 23 | String id = parent.getId(); 24 | if (id != null && id.equals(pid)) { 25 | parent.getChildren().add(child); 26 | child.setHasParent(true); 27 | parent.setChildren(true); 28 | continue; 29 | } 30 | } 31 | } 32 | Tree root = new Tree(); 33 | if (topNodes.size() == 1) { 34 | root = topNodes.get(0); 35 | } else { 36 | root.setId("-1"); 37 | root.setParentId(""); 38 | root.setHasParent(false); 39 | root.setChildren(true); 40 | root.setChecked(true); 41 | root.setChildren(topNodes); 42 | root.setText("顶级节点"); 43 | Map state = new HashMap<>(16); 44 | state.put("opened", true); 45 | root.setState(state); 46 | } 47 | return root; 48 | } 49 | 50 | public static List> buildList(List> nodes, String idParam) { 51 | if (nodes == null) { 52 | return null; 53 | } 54 | List> topNodes = new ArrayList>(); 55 | for (Tree child : nodes) { 56 | String pid = child.getParentId(); 57 | if (pid == null || idParam.equals(pid)) { 58 | topNodes.add(child); 59 | continue; 60 | } 61 | for (Tree parent : nodes) { 62 | String id = parent.getId(); 63 | if (id != null && id.equals(pid)) { 64 | parent.getChildren().add(child); 65 | child.setHasParent(true); 66 | parent.setChildren(true); 67 | continue; 68 | } 69 | } 70 | } 71 | return topNodes; 72 | } 73 | 74 | } -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/utils/JwtUtils.java: -------------------------------------------------------------------------------- 1 | //package com.bootdo.clouddoadmin.utils; 2 | // 3 | //import com.bootdo.clouddoadmin.constants.constants; 4 | //import com.bootdo.clouddoadmin.vo.UserToken; 5 | //import com.netflix.discovery.CommonConstants; 6 | //import io.jsonwebtoken.Claims; 7 | //import io.jsonwebtoken.Jws; 8 | //import io.jsonwebtoken.Jwts; 9 | //import io.jsonwebtoken.SignatureAlgorithm; 10 | // 11 | //import java.util.Date; 12 | // 13 | ///** 14 | // * @author bootdo 1992lcg@163.com 15 | // * @version V1.0 16 | // */ 17 | //public class JwtUtils { 18 | // public static String generateToken(UserToken userToken, int expire) throws Exception { 19 | // String token = Jwts.builder() 20 | // .setSubject(userToken.getUsername()) 21 | // .claim(constants.USER_TOKEN_ID, userToken.getUserId()) 22 | // .claim(constants.USER_TOKEN_NAME, userToken.getName()) 23 | // .setExpiration(new Date(System.currentTimeMillis()+expire)) 24 | // .signWith(SignatureAlgorithm.HS256, constants.JWT_PRIVATE_KEY) 25 | // .compact(); 26 | // return token; 27 | // } 28 | // 29 | // 30 | // public static UserToken getInfoFromToken(String token) throws Exception { 31 | // Claims claims = Jwts.parser() 32 | // .setSigningKey(constants.JWT_PRIVATE_KEY).parseClaimsJws(token) 33 | // .getBody(); 34 | // return new UserToken(claims.getSubject(), ((Integer)claims.get(constants.USER_TOKEN_ID)).longValue() ,claims.get(constants.USER_TOKEN_NAME).toString()); 35 | // } 36 | //} 37 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/utils/MD5Utils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.utils; 2 | 3 | import org.apache.shiro.crypto.hash.SimpleHash; 4 | import org.apache.shiro.util.ByteSource; 5 | 6 | public class MD5Utils { 7 | private static final String SALT = "1qazxsw2"; 8 | 9 | private static final String ALGORITH_NAME = "md5"; 10 | 11 | private static final int HASH_ITERATIONS = 2; 12 | 13 | public static String encrypt(String pswd) { 14 | String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(SALT), HASH_ITERATIONS).toHex(); 15 | return newPassword; 16 | } 17 | 18 | public static String encrypt(String username, String pswd) { 19 | String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(username + SALT), 20 | HASH_ITERATIONS).toHex(); 21 | return newPassword; 22 | } 23 | public static void main(String[] args) { 24 | 25 | System.out.println(MD5Utils.encrypt("admin", "1")); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/utils/TokenUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.utils; 2 | 3 | import com.bootdo.clouddoadmin.dao.TokenDao; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | 6 | import javax.servlet.http.Cookie; 7 | import javax.servlet.http.HttpServletRequest; 8 | 9 | /** 10 | * @author bootdo 1992lcg@163.com 11 | * @version V1.0 12 | */ 13 | public class TokenUtils { 14 | @Autowired 15 | TokenDao tokenDao; 16 | String getCurrent(HttpServletRequest request) { 17 | Cookie[] cookies = request.getCookies(); 18 | for (Cookie cookie : cookies) { 19 | if ("token".equals(cookie.getName())) { 20 | return cookie.getValue(); 21 | } 22 | } 23 | return null; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/vo/UserToken.java: -------------------------------------------------------------------------------- 1 | //package com.bootdo.clouddoadmin.vo; 2 | // 3 | //import java.io.Serializable; 4 | // 5 | ///** 6 | // * @author bootdo 1992lcg@163.com 7 | // * @version V1.0 8 | // */ 9 | //public class UserToken implements Serializable{ 10 | // private static final long serialVersionUID = 1L; 11 | // 12 | // public UserToken( String username,Long userId, String name) { 13 | // this.userId = userId; 14 | // this.username = username; 15 | // this.name = name; 16 | // } 17 | // 18 | // /** 19 | // * 用户id 20 | // */ 21 | // private Long userId; 22 | // /** 23 | // * 用户登录名 24 | // */ 25 | // private String username; 26 | // /** 27 | // * 用户真实姓名 28 | // */ 29 | // private String name; 30 | // 31 | // public Long getUserId() { 32 | // return userId; 33 | // } 34 | // 35 | // public void setUserId(Long userId) { 36 | // this.userId = userId; 37 | // } 38 | // 39 | // public String getUsername() { 40 | // return username; 41 | // } 42 | // 43 | // public void setUsername(String username) { 44 | // this.username = username; 45 | // } 46 | // 47 | // public String getName() { 48 | // return name; 49 | // } 50 | // 51 | // public void setName(String name) { 52 | // this.name = name; 53 | // } 54 | // 55 | // @Override 56 | // public String toString() { 57 | // return "UserToken{" + 58 | // "userId=" + userId + 59 | // ", username='" + username + '\'' + 60 | // ", name='" + name + '\'' + 61 | // '}'; 62 | // } 63 | //} 64 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/java/com/bootdo/clouddoadmin/vo/UserVO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoadmin.vo; 2 | 3 | import com.bootdo.clouddoadmin.domain.UserDO; 4 | 5 | /** 6 | * @author gaoyuzhe 7 | * @date 2017/12/15. 8 | */ 9 | public class UserVO { 10 | /** 11 | * 更新的用户对象 12 | */ 13 | private UserDO userDO = new UserDO(); 14 | /** 15 | * 旧密码 16 | */ 17 | private String pwdOld; 18 | /** 19 | * 新密码 20 | */ 21 | private String pwdNew; 22 | 23 | public UserDO getUserDO() { 24 | return userDO; 25 | } 26 | 27 | public void setUserDO(UserDO userDO) { 28 | this.userDO = userDO; 29 | } 30 | 31 | public String getPwdOld() { 32 | return pwdOld; 33 | } 34 | 35 | public void setPwdOld(String pwdOld) { 36 | this.pwdOld = pwdOld; 37 | } 38 | 39 | public String getPwdNew() { 40 | return pwdNew; 41 | } 42 | 43 | public void setPwdNew(String pwdNew) { 44 | this.pwdNew = pwdNew; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | eureka: 2 | client: 3 | serviceUrl: 4 | defaultZone: http://localhost:8001/eureka/ 5 | #security: 6 | # basic: 7 | # enabled: false 8 | server: 9 | port: 8005 10 | spring: 11 | application: 12 | name: api-admin 13 | datasource: 14 | url: jdbc:mysql://127.0.0.1:3306/clouddo?useUnicode=true&characterEncoding=utf8 15 | username: root 16 | password: root 17 | jackson: 18 | date-format: yyyy-MM-dd 19 | time-zone: GMT+8 20 | mybatis: 21 | mapper-locations: mapper/**Mapper.xml 22 | configuration: 23 | map-underscore-to-camel-case: true 24 | #logging: 25 | # level: debug -------------------------------------------------------------------------------- /clouddo-admin/src/main/resources/mapper/DeptMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 34 | 35 | 45 | 46 | 48 | insert into sys_dept 49 | ( 50 | `parent_id`, 51 | `name`, 52 | `order_num`, 53 | `del_flag` 54 | ) 55 | values 56 | ( 57 | #{parentId}, 58 | #{name}, 59 | #{orderNum}, 60 | #{delFlag} 61 | ) 62 | 63 | 64 | 65 | update sys_dept 66 | 67 | `parent_id` = #{parentId}, 68 | `name` = #{name}, 69 | `order_num` = #{orderNum}, 70 | `del_flag` = #{delFlag} 71 | 72 | where dept_id = #{deptId} 73 | 74 | 75 | 76 | delete from sys_dept where dept_id = #{value} 77 | 78 | 79 | 80 | delete from sys_dept where dept_id in 81 | 83 | #{deptId} 84 | 85 | 86 | 87 | 90 | 91 | 94 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/resources/mapper/MenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 38 | 39 | 56 | 57 | 58 | insert into sys_menu 59 | ( 60 | `component`, 61 | `parent_id`, 62 | `name`, 63 | `url`, 64 | `perms`, 65 | `type`, 66 | `icon`, 67 | `order_num`, 68 | `gmt_create`, 69 | `gmt_modified`, 70 | `redirect` 71 | ) 72 | values 73 | ( 74 | #{component}, 75 | #{parentId}, 76 | #{name}, 77 | #{url}, 78 | #{perms}, 79 | #{type}, 80 | #{icon}, 81 | #{orderNum}, 82 | #{gmtCreate}, 83 | #{gmtModified}, 84 | #{redirect} 85 | ) 86 | 87 | 88 | 89 | update sys_menu 90 | 91 | `component` = #{component}, 92 | `parent_id` = #{parentId}, 93 | `name` = #{name}, 94 | `url` = #{url}, 95 | `perms` = #{perms}, 96 | `type` = #{type}, 97 | `icon` = #{icon}, 98 | `order_num` = #{orderNum}, 99 | `gmt_create` = #{gmtCreate}, 100 | `gmt_modified` = #{gmtModified}, 101 | `redirect` = #{redirect} 102 | 103 | where menu_id = #{menuId} 104 | 105 | 106 | 107 | delete from sys_menu where menu_id = #{value} 108 | 109 | 110 | 111 | delete from sys_menu where menu_id in 112 | 113 | #{menuId} 114 | 115 | 116 | 117 | 131 | 132 | 140 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/resources/mapper/RoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 37 | 38 | 50 | 51 | 53 | insert into sys_role 54 | ( 55 | `role_name`, 56 | `role_sign`, 57 | `remark`, 58 | `user_id_create`, 59 | `gmt_create`, 60 | `gmt_modified` 61 | ) 62 | values 63 | ( 64 | #{roleName}, 65 | #{roleSign}, 66 | #{remark}, 67 | #{userIdCreate}, 68 | #{gmtCreate}, 69 | #{gmtModified} 70 | ) 71 | 72 | 73 | 74 | update sys_role 75 | 76 | `role_name` = #{roleName}, 77 | `role_sign` = #{roleSign}, 78 | `remark` = #{remark}, 79 | `user_id_create` = #{userIdCreate}, 80 | `gmt_create` = #{gmtCreate}, 81 | `gmt_modified` = #{gmtModified} 82 | 83 | where role_id = #{roleId} 84 | 85 | 86 | 87 | delete from sys_role where role_id = #{value} 88 | 89 | 90 | 91 | delete from sys_role where role_id in 92 | 94 | #{roleId} 95 | 96 | 97 | 98 | 102 | 103 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/resources/mapper/RoleMenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 30 | 31 | 39 | 40 | 42 | insert into sys_role_menu 43 | ( 44 | `role_id`, 45 | `menu_id` 46 | ) 47 | values 48 | ( 49 | #{roleId}, 50 | #{menuId} 51 | ) 52 | 53 | 54 | 55 | update sys_role_menu 56 | 57 | `role_id` = #{roleId}, 58 | `menu_id` = #{menuId} 59 | 60 | where id = #{id} 61 | 62 | 63 | 64 | delete from sys_role_menu where id = #{value} 65 | 66 | 67 | 68 | delete from sys_role_menu where id in 69 | 71 | #{id} 72 | 73 | 74 | 75 | 79 | 80 | 81 | DELETE FROM sys_role_menu WHERE role_id=#{roleId} 82 | 83 | 84 | 85 | DELETE FROM sys_role_menu WHERE menu_id=#{menuId} 86 | 87 | 88 | 89 | INSERT INTO sys_role_menu(role_id, menu_id) values 90 | 92 | (#{item.roleId},#{item.menuId}) 93 | 94 | 95 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/resources/mapper/UserRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 30 | 31 | 39 | 40 | 42 | insert into sys_user_role 43 | ( 44 | `user_id`, 45 | `role_id` 46 | ) 47 | values 48 | ( 49 | #{userId}, 50 | #{roleId} 51 | ) 52 | 53 | 54 | 55 | update sys_user_role 56 | 57 | `user_id` = #{userId}, 58 | `role_id` = #{roleId} 59 | 60 | where id = #{id} 61 | 62 | 63 | 64 | delete from sys_user_role where id = #{value} 65 | 66 | 67 | 68 | delete from sys_user_role where id in 69 | 71 | #{id} 72 | 73 | 74 | 75 | 80 | 81 | 82 | delete from sys_user_role where user_id=#{userId} 83 | 84 | 85 | 86 | delete from sys_user_role where user_id in 87 | 89 | #{id} 90 | 91 | 92 | 93 | 94 | INSERT INTO sys_user_role(user_id, role_id) values 95 | 97 | (#{item.userId},#{item.roleId}) 98 | 99 | 100 | -------------------------------------------------------------------------------- /clouddo-admin/src/main/resources/spring-ehcache.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /clouddo-admin/src/test/java/com/bootdo/clouddoadmin/ClouddoAdminApplicationTests.java: -------------------------------------------------------------------------------- 1 | //package com.bootdo.clouddoadmin; 2 | // 3 | //import org.junit.runner.RunWith; 4 | //import org.springframework.boot.test.context.SpringBootTest; 5 | //import org.springframework.test.context.junit4.SpringRunner; 6 | // 7 | //@RunWith(SpringRunner.class) 8 | //@SpringBootTest 9 | //public class ClouddoAdminApplicationTests { 10 | // 11 | // public static void main(String[] args) { 12 | // MobileCardCompanyDO cardPayOrderModel = new MobileCardCompanyDO(); 13 | // cardPayOrderModel.setCompanyCode("HS"); 14 | // cardPayOrderModel.setCompanyDesc("a1231241241awdasdf"); 15 | // cardPayOrderModel.setCompanyName("123124dzvsds"); 16 | // cardPayOrderModel.setId(2l); 17 | // cardPayOrderModel.setStatus("1"); 18 | // CompanyModel companyModel = new CompanyModel(); 19 | // 20 | // /** 21 | // * 10W次 22 | // * BeanUtils.copyProperties:718 23 | // * beanCopier.copy:56 24 | // */ 25 | // 26 | // /** 27 | // * 100W次 28 | // * BeanUtils.copyProperties:5673 29 | // * beanCopier.copy:70 30 | // */ 31 | // 32 | // //BeanUtils性能 33 | // long start = System.currentTimeMillis(); 34 | // for (int i = 0; i < 1000000; i++) { 35 | // BeanUtils.copyProperties(cardPayOrderModel, companyModel); 36 | // } 37 | // long end = System.currentTimeMillis(); 38 | // System.out.println(end - start); 39 | // 40 | // //BeanCopier性能 41 | // long start1 = System.currentTimeMillis(); 42 | // BeanCopier beanCopier = BeanCopier.create(MobileCardCompanyDO.class, CompanyModel.class, 43 | // false); 44 | // for (int i = 0; i < 1000000; i++) { 45 | // beanCopier.copy(cardPayOrderModel, companyModel, null); 46 | // } 47 | // long end1 = System.currentTimeMillis(); 48 | // System.out.println(end1 - start1); 49 | // } 50 | // 51 | //} 52 | -------------------------------------------------------------------------------- /clouddo-base/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.bootdo 7 | clouddo-base 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | clouddo-base 12 | 日志等基础服务 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 2.0.4.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | Finchley.SR1 26 | 27 | 28 | 29 | 30 | org.springframework.cloud 31 | spring-cloud-starter-netflix-eureka-server 32 | 33 | 34 | 35 | org.springframework.boot 36 | spring-boot-starter-web 37 | 38 | 39 | 40 | org.springframework.boot 41 | spring-boot-starter-test 42 | test 43 | 44 | 45 | 46 | mysql 47 | mysql-connector-java 48 | 49 | 50 | org.mybatis 51 | mybatis 52 | 3.4.4 53 | 54 | 55 | 56 | org.mybatis.spring.boot 57 | mybatis-spring-boot-starter 58 | 1.1.1 59 | 60 | 61 | 62 | com.bootdo 63 | clouddo-common 64 | 0.0.1-SNAPSHOT 65 | 66 | 67 | 68 | 69 | 70 | 71 | org.springframework.cloud 72 | spring-cloud-dependencies 73 | ${spring-cloud.version} 74 | pom 75 | import 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | org.springframework.boot 84 | spring-boot-maven-plugin 85 | 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /clouddo-base/src/main/java/com/bootdo/clouddobase/ClouddoBaseApplication.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddobase; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @MapperScan(basePackages = {"com.bootdo.*.dao"}) 8 | @SpringBootApplication 9 | public class ClouddoBaseApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(ClouddoBaseApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /clouddo-base/src/main/java/com/bootdo/clouddobase/controller/LogController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddobase.controller; 2 | 3 | 4 | import com.bootdo.clouddocommon.dto.LogDO; 5 | import com.bootdo.clouddocommon.utils.PageUtils; 6 | import com.bootdo.clouddocommon.utils.Query; 7 | import com.bootdo.clouddocommon.utils.R; 8 | import com.bootdo.clouddobase.service.LogService; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.stereotype.Controller; 11 | import org.springframework.web.bind.annotation.*; 12 | 13 | import java.util.HashMap; 14 | import java.util.List; 15 | import java.util.Map; 16 | 17 | @RequestMapping("/log") 18 | @RestController 19 | public class LogController { 20 | @Autowired 21 | LogService logService; 22 | 23 | @GetMapping() 24 | R list(@RequestParam Map params) { 25 | Query query = new Query(params); 26 | return R.page(new PageUtils(logService.queryList(query), logService.count(query))); 27 | } 28 | 29 | @PostMapping("/save") 30 | R save(@RequestBody LogDO logDO) { 31 | if (logService.save(logDO) > 0) { 32 | return R.ok(); 33 | } 34 | return R.error(); 35 | } 36 | 37 | @DeleteMapping() 38 | R remove(Long id) { 39 | if (logService.remove(id) > 0) { 40 | return R.ok(); 41 | } 42 | return R.error(); 43 | } 44 | 45 | @PostMapping("/batchRemove") 46 | R batchRemove(@RequestParam("ids[]") Long[] ids) { 47 | int r = logService.batchRemove(ids); 48 | if (r > 0) { 49 | return R.ok(); 50 | } 51 | return R.error(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /clouddo-base/src/main/java/com/bootdo/clouddobase/dao/LogDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddobase.dao; 2 | 3 | import com.bootdo.clouddocommon.dto.LogDO; 4 | import org.apache.ibatis.annotations.Mapper; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 系统日志 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2017-10-03 15:45:42 14 | */ 15 | @Mapper 16 | public interface LogDao { 17 | 18 | LogDO get(Long id); 19 | 20 | List list(Map map); 21 | 22 | int count(Map map); 23 | 24 | int save(LogDO log); 25 | 26 | int update(LogDO log); 27 | 28 | int remove(Long id); 29 | 30 | int batchRemove(Long[] ids); 31 | } 32 | -------------------------------------------------------------------------------- /clouddo-base/src/main/java/com/bootdo/clouddobase/service/LogService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddobase.service; 2 | 3 | 4 | import com.bootdo.clouddocommon.dto.LogDO; 5 | import com.bootdo.clouddocommon.utils.Query; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Service 12 | public interface LogService { 13 | int save(LogDO logDO); 14 | 15 | List queryList(Query query); 16 | 17 | int count(Query query); 18 | 19 | int remove(Long id); 20 | 21 | int batchRemove(Long[] ids); 22 | } 23 | -------------------------------------------------------------------------------- /clouddo-base/src/main/java/com/bootdo/clouddobase/service/impl/LogServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddobase.service.impl; 2 | 3 | 4 | import com.bootdo.clouddocommon.dto.LogDO; 5 | import com.bootdo.clouddocommon.utils.Query; 6 | import com.bootdo.clouddobase.dao.LogDao; 7 | import com.bootdo.clouddobase.service.LogService; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.scheduling.annotation.Async; 10 | import org.springframework.stereotype.Service; 11 | 12 | import java.util.List; 13 | 14 | @Service 15 | public class LogServiceImpl implements LogService { 16 | @Autowired 17 | LogDao logMapper; 18 | 19 | @Async 20 | @Override 21 | public int save(LogDO logDO) { 22 | return logMapper.save(logDO); 23 | } 24 | 25 | @Override 26 | public List queryList(Query query) { 27 | List logs = logMapper.list(query); 28 | return logs; 29 | } 30 | 31 | @Override 32 | public int count(Query query) { 33 | return logMapper.count(query); 34 | } 35 | 36 | @Override 37 | public int remove(Long id) { 38 | int count = logMapper.remove(id); 39 | return count; 40 | } 41 | 42 | @Override 43 | public int batchRemove(Long[] ids) { 44 | return logMapper.batchRemove(ids); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /clouddo-base/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | eureka: 2 | client: 3 | serviceUrl: 4 | defaultZone: http://localhost:8001/eureka/ 5 | spring: 6 | application: 7 | name: api-base 8 | datasource: 9 | url: jdbc:mysql://127.0.0.1:3306/clouddo?useUnicode=true&characterEncoding=utf8 10 | username: root 11 | password: root 12 | mybatis: 13 | mapper-locations: mapper/**Mapper.xml 14 | configuration: 15 | map-underscore-to-camel-case: true -------------------------------------------------------------------------------- /clouddo-base/src/main/resources/mapper/LogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 35 | 36 | 50 | 51 | 52 | insert into sys_log 53 | ( 54 | `user_id`, 55 | `username`, 56 | `operation`, 57 | `time`, 58 | `method`, 59 | `params`, 60 | `ip`, 61 | `gmt_create` 62 | ) 63 | values 64 | ( 65 | #{userId}, 66 | #{username}, 67 | #{operation}, 68 | #{time}, 69 | #{method}, 70 | #{params}, 71 | #{ip}, 72 | #{gmtCreate} 73 | ) 74 | 75 | 76 | 77 | update sys_log 78 | 79 | `user_id` = #{userId}, 80 | `username` = #{username}, 81 | `operation` = #{operation}, 82 | `time` = #{time}, 83 | `method` = #{method}, 84 | `params` = #{params}, 85 | `ip` = #{ip}, 86 | `gmt_create` = #{gmtCreate} 87 | 88 | where id = #{id} 89 | 90 | 91 | 92 | delete from sys_log where id = #{value} 93 | 94 | 95 | 96 | delete from sys_log where id in 97 | 98 | #{id} 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /clouddo-base/src/main/resources/mybatis/LogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 35 | 36 | 50 | 51 | 52 | insert into sys_log 53 | ( 54 | `user_id`, 55 | `username`, 56 | `operation`, 57 | `time`, 58 | `method`, 59 | `params`, 60 | `ip`, 61 | `gmt_create` 62 | ) 63 | values 64 | ( 65 | #{userId}, 66 | #{username}, 67 | #{operation}, 68 | #{time}, 69 | #{method}, 70 | #{params}, 71 | #{ip}, 72 | #{gmtCreate} 73 | ) 74 | 75 | 76 | 77 | update sys_log 78 | 79 | `user_id` = #{userId}, 80 | `username` = #{username}, 81 | `operation` = #{operation}, 82 | `time` = #{time}, 83 | `method` = #{method}, 84 | `params` = #{params}, 85 | `ip` = #{ip}, 86 | `gmt_create` = #{gmtCreate} 87 | 88 | where id = #{id} 89 | 90 | 91 | 92 | delete from sys_log where id = #{value} 93 | 94 | 95 | 96 | delete from sys_log where id in 97 | 98 | #{id} 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /clouddo-base/src/test/java/com/bootdo/clouddobase/ClouddoLogApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddobase; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class ClouddoLogApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /clouddo-cms/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.bootdo 7 | clouddo-cms 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | clouddo-cms 12 | Demo project for Spring Boot 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 2.0.4.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | Finchley.SR1 26 | 27 | 28 | 29 | 30 | org.mybatis.spring.boot 31 | mybatis-spring-boot-starter 32 | 1.3.1 33 | 34 | 35 | org.springframework.cloud 36 | spring-cloud-starter-netflix-eureka-server 37 | 38 | 39 | org.springframework.cloud 40 | spring-cloud-starter-netflix-hystrix 41 | 42 | 43 | org.springframework.cloud 44 | spring-cloud-starter-openfeign 45 | 46 | 47 | 48 | mysql 49 | mysql-connector-java 50 | runtime 51 | 52 | 53 | org.springframework.boot 54 | spring-boot-starter-test 55 | test 56 | 57 | 58 | 59 | com.bootdo 60 | clouddo-common 61 | 0.0.1-SNAPSHOT 62 | 63 | 64 | 65 | 66 | 67 | 68 | org.springframework.cloud 69 | spring-cloud-dependencies 70 | ${spring-cloud.version} 71 | pom 72 | import 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | org.springframework.boot 81 | spring-boot-maven-plugin 82 | 83 | 84 | org.apache.maven.plugins 85 | maven-compiler-plugin 86 | 3.6.1 87 | 88 | 1.8 89 | 1.8 90 | 91 | 92 | org.mapstruct 93 | mapstruct-processor 94 | ${org.mapstruct.version} 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | spring-milestones 105 | Spring Milestones 106 | https://repo.spring.io/milestone 107 | 108 | false 109 | 110 | 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/ClouddoCmsApplication.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.web.servlet.FilterRegistrationBean; 6 | import org.springframework.cache.annotation.EnableCaching; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.scheduling.annotation.EnableScheduling; 9 | 10 | @EnableCaching 11 | @EnableScheduling 12 | @SpringBootApplication 13 | public class ClouddoCmsApplication { 14 | 15 | public static void main(String[] args) { 16 | SpringApplication.run(ClouddoCmsApplication.class, args); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/config/AuthConfig.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.config; 2 | 3 | import com.bootdo.clouddocommon.intercepter.AuthIntercepter; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.web.servlet.config.annotation.InterceptorRegistration; 7 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 8 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 9 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 10 | 11 | @Configuration 12 | public class AuthConfig implements WebMvcConfigurer { 13 | @Bean 14 | public AuthIntercepter authIntercepter() { 15 | return new AuthIntercepter(); 16 | } 17 | 18 | @Override 19 | public void addInterceptors(InterceptorRegistry registry) { 20 | InterceptorRegistration addInterceptor = registry.addInterceptor(authIntercepter()); 21 | 22 | // 排除配置 23 | addInterceptor.excludePathPatterns("/error"); 24 | addInterceptor.excludePathPatterns("/files/**"); 25 | 26 | // 拦截配置 27 | addInterceptor.addPathPatterns("/**"); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/config/WebConfig.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.config; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.stereotype.Component; 5 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 | 8 | @Component 9 | public class WebConfig implements WebMvcConfigurer { 10 | @Value("${app.filePath}") 11 | String filePath; 12 | 13 | @Value("${app.pre}") 14 | String pre; 15 | @Override 16 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 17 | registry.addResourceHandler(pre+"/**").addResourceLocations("file:///"+filePath); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/controller/FileController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.controller; 2 | 3 | import java.io.IOException; 4 | import java.util.Date; 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.UUID; 8 | 9 | import com.bootdo.clouddocommon.context.FilterContextHandler; 10 | import com.bootdo.clouddocommon.utils.FileUtils; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.beans.factory.annotation.Value; 13 | import org.springframework.ui.Model; 14 | import org.springframework.stereotype.Controller; 15 | import org.springframework.web.bind.annotation.*; 16 | 17 | import com.bootdo.clouddocms.domain.FileDO; 18 | import com.bootdo.clouddocms.dto.FileDTO; 19 | import com.bootdo.clouddocms.dto.convert.FileConvert; 20 | import com.bootdo.clouddocms.service.FileService; 21 | import com.bootdo.clouddocommon.utils.PageUtils; 22 | import com.bootdo.clouddocommon.utils.Query; 23 | import com.bootdo.clouddocommon.utils.R; 24 | import org.springframework.web.multipart.MultipartFile; 25 | 26 | /** 27 | * 文件上传 28 | * 29 | * @author chglee 30 | * @email 1992lcg@163.com 31 | * @date 2018-03-12 12:17:36 32 | */ 33 | 34 | @RestController 35 | @RequestMapping("/file") 36 | public class FileController { 37 | @Value("${app.filePath}") 38 | String filePath; 39 | 40 | @Value("${app.pre}") 41 | String filePre; 42 | 43 | @Autowired 44 | private FileService fileService; 45 | 46 | @GetMapping("{id}") 47 | public R get(@PathVariable Long id) { 48 | FileDTO fileDTO = FileConvert.MAPPER.do2dto(fileService.get(id)); 49 | return R.data(fileDTO); 50 | } 51 | 52 | @GetMapping("getToken") 53 | public R getToken() { 54 | return R.ok().put("token", FilterContextHandler.getToken()).put("url", "http://localhost:8002/api-cms/file/upload") 55 | .put("key", UUID.randomUUID().toString()); 56 | } 57 | 58 | @PostMapping("upload") 59 | public R upload(MultipartFile file, String key) { 60 | try { 61 | String resPath = FileUtils.saveFile(file.getBytes(), filePath, key); 62 | fileService.save(new FileDO() {{ 63 | setCreateDate(new Date()); 64 | setUrl("http://localhost:8004" + filePre + "/"+resPath); 65 | setType(1); 66 | }}); 67 | return R.ok().put("resPath", resPath); 68 | } catch (IOException e) { 69 | e.printStackTrace(); 70 | return R.error("文件上传失败"); 71 | } 72 | } 73 | 74 | /** 75 | * 分页查询 76 | */ 77 | @GetMapping 78 | public R list(@RequestParam Map params) { 79 | Query query = new Query(params); 80 | List fileList = fileService.list(query); 81 | // List fileDTOS = FileConvert.MAPPER.dos2dtos(fileList); 82 | int total = fileService.count(query); 83 | // PageUtils pageUtils = new PageUtils(fileDTOS, total); 84 | PageUtils pageUtils = new PageUtils(fileList, total); 85 | return R.page(pageUtils); 86 | } 87 | 88 | /** 89 | * 保存 90 | */ 91 | @PostMapping 92 | public R save(FileDO file) { 93 | return R.operate(fileService.save(file) > 0); 94 | } 95 | 96 | /** 97 | * 修改 98 | */ 99 | @PutMapping 100 | public R update(FileDO file) { 101 | return R.operate(fileService.update(file) > 0); 102 | } 103 | 104 | /** 105 | * 删除 106 | */ 107 | @DeleteMapping 108 | public R remove(Long id) { 109 | return R.operate(fileService.remove(id) > 0); 110 | } 111 | 112 | /** 113 | * 删除 114 | */ 115 | @DeleteMapping("/batchRemove") 116 | public R remove(@RequestParam("ids[]") Long[] ids) { 117 | return R.operate(fileService.batchRemove(ids) > 0); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/dao/FileDao.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.dao; 2 | 3 | import com.bootdo.clouddocms.domain.FileDO; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import org.apache.ibatis.annotations.Mapper; 9 | 10 | /** 11 | * 文件上传 12 | * @author chglee 13 | * @email 1992lcg@163.com 14 | * @date 2018-03-11 20:04:05 15 | */ 16 | @Mapper 17 | public interface FileDao { 18 | 19 | FileDO get(Long id); 20 | 21 | List list(Map map); 22 | 23 | int count(Map map); 24 | 25 | int save(FileDO file); 26 | 27 | int update(FileDO file); 28 | 29 | int remove(Long id); 30 | 31 | int batchRemove(Long[] ids); 32 | } 33 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/domain/FileDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.domain; 2 | 3 | import java.io.Serializable; 4 | import java.util.Date; 5 | 6 | 7 | 8 | /** 9 | * 文件上传 10 | * 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2018-03-11 20:04:05 14 | */ 15 | public class FileDO implements Serializable { 16 | private static final long serialVersionUID = 1L; 17 | 18 | // 19 | private Long id; 20 | //文件类型 21 | private Integer type; 22 | //URL地址 23 | private String url; 24 | //创建时间 25 | private Date createDate; 26 | 27 | /** 28 | * 设置: 29 | */ 30 | public void setId(Long id) { 31 | this.id = id; 32 | } 33 | /** 34 | * 获取: 35 | */ 36 | public Long getId() { 37 | return id; 38 | } 39 | /** 40 | * 设置:文件类型 41 | */ 42 | public void setType(Integer type) { 43 | this.type = type; 44 | } 45 | /** 46 | * 获取:文件类型 47 | */ 48 | public Integer getType() { 49 | return type; 50 | } 51 | /** 52 | * 设置:URL地址 53 | */ 54 | public void setUrl(String url) { 55 | this.url = url; 56 | } 57 | /** 58 | * 获取:URL地址 59 | */ 60 | public String getUrl() { 61 | return url; 62 | } 63 | /** 64 | * 设置:创建时间 65 | */ 66 | public void setCreateDate(Date createDate) { 67 | this.createDate = createDate; 68 | } 69 | /** 70 | * 获取:创建时间 71 | */ 72 | public Date getCreateDate() { 73 | return createDate; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/dto/FileDTO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.dto; 2 | 3 | import java.io.Serializable; 4 | import java.util.Date; 5 | 6 | 7 | 8 | /** 9 | * 文件上传 10 | * 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2018-03-12 10:18:23 14 | */ 15 | public class FileDTO implements Serializable { 16 | private static final long serialVersionUID = 1L; 17 | 18 | // 19 | private Long id; 20 | //文件类型 21 | private Integer type; 22 | //URL地址 23 | private String url; 24 | //创建时间 25 | private Date createDate; 26 | 27 | /** 28 | * 设置: 29 | */ 30 | public void setId(Long id) { 31 | this.id = id; 32 | } 33 | /** 34 | * 获取: 35 | */ 36 | public Long getId() { 37 | return id; 38 | } 39 | /** 40 | * 设置:文件类型 41 | */ 42 | public void setType(Integer type) { 43 | this.type = type; 44 | } 45 | /** 46 | * 获取:文件类型 47 | */ 48 | public Integer getType() { 49 | return type; 50 | } 51 | /** 52 | * 设置:URL地址 53 | */ 54 | public void setUrl(String url) { 55 | this.url = url; 56 | } 57 | /** 58 | * 获取:URL地址 59 | */ 60 | public String getUrl() { 61 | return url; 62 | } 63 | /** 64 | * 设置:创建时间 65 | */ 66 | public void setCreateDate(Date createDate) { 67 | this.createDate = createDate; 68 | } 69 | /** 70 | * 获取:创建时间 71 | */ 72 | public Date getCreateDate() { 73 | return createDate; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/dto/convert/FileConvert.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.dto.convert; 2 | 3 | 4 | import com.bootdo.clouddocms.domain.FileDO; 5 | import com.bootdo.clouddocms.dto.FileDTO; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | import java.util.List; 9 | 10 | @org.mapstruct.Mapper 11 | public interface FileConvert { 12 | FileConvert MAPPER = Mappers.getMapper(FileConvert.class); 13 | 14 | public FileDTO do2dto(FileDO person); 15 | 16 | public List dos2dtos(List list); 17 | } -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/service/FileService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.service; 2 | 3 | import com.bootdo.clouddocms.domain.FileDO; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | /** 9 | * 文件上传 10 | * 11 | * @author chglee 12 | * @email 1992lcg@163.com 13 | * @date 2018-03-11 20:04:05 14 | */ 15 | public interface FileService { 16 | 17 | FileDO get(Long id); 18 | 19 | List list(Map map); 20 | 21 | int count(Map map); 22 | 23 | int save(FileDO file); 24 | 25 | int update(FileDO file); 26 | 27 | int remove(Long id); 28 | 29 | int batchRemove(Long[] ids); 30 | } 31 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/java/com/bootdo/clouddocms/service/impl/FileServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocms.service.impl; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | import com.bootdo.clouddocms.dao.FileDao; 10 | import com.bootdo.clouddocms.domain.FileDO; 11 | import com.bootdo.clouddocms.service.FileService; 12 | 13 | 14 | 15 | @Service 16 | public class FileServiceImpl implements FileService { 17 | @Autowired 18 | private FileDao fileDao; 19 | 20 | @Override 21 | public FileDO get(Long id){ 22 | return fileDao.get(id); 23 | } 24 | 25 | @Override 26 | public List list(Map map){ 27 | return fileDao.list(map); 28 | } 29 | 30 | @Override 31 | public int count(Map map){ 32 | return fileDao.count(map); 33 | } 34 | 35 | @Override 36 | public int save(FileDO file){ 37 | return fileDao.save(file); 38 | } 39 | 40 | @Override 41 | public int update(FileDO file){ 42 | return fileDao.update(file); 43 | } 44 | 45 | @Override 46 | public int remove(Long id){ 47 | return fileDao.remove(id); 48 | } 49 | 50 | @Override 51 | public int batchRemove(Long[] ids){ 52 | return fileDao.batchRemove(ids); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /clouddo-cms/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | eureka: 2 | client: 3 | serviceUrl: 4 | defaultZone: http://localhost:8001/eureka/ 5 | server: 6 | port: 8004 7 | spring: 8 | application: 9 | name: api-cms 10 | datasource: 11 | url: jdbc:mysql://127.0.0.1:3306/clouddo?useUnicode=true&characterEncoding=utf8 12 | username: root 13 | password: root 14 | jackson: 15 | date-format: yyyy-MM-dd 16 | time-zone: GMT+8 17 | servlet: 18 | multipart: 19 | max-file-size: 100Mb 20 | max-request-size: 100Mb 21 | mybatis: 22 | mapper-locations: mapper/**Mapper.xml 23 | configuration: 24 | map-underscore-to-camel-case: true 25 | app: 26 | filePath: c:/var/uploaded_files/ 27 | pre: /files -------------------------------------------------------------------------------- /clouddo-cms/src/main/resources/mapper/FileMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 30 | 31 | 40 | 41 | 42 | insert into cms_file 43 | ( 44 | `type`, 45 | `url`, 46 | `create_date` 47 | ) 48 | values 49 | ( 50 | #{type}, 51 | #{url}, 52 | #{createDate} 53 | ) 54 | 55 | 56 | 57 | update cms_file 58 | 59 | `type` = #{type}, 60 | `url` = #{url}, 61 | `create_date` = #{createDate} 62 | 63 | where id = #{id} 64 | 65 | 66 | 67 | delete from cms_file where id = #{value} 68 | 69 | 70 | 71 | delete from cms_file where id in 72 | 73 | #{id} 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /clouddo-common/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.bootdo 7 | clouddo-common 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | clouddo-common 12 | Demo project for Spring Boot 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 2.0.4.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | Finchley.SR1 26 | 1.2.0.Final 27 | 28 | 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-web 33 | 34 | 35 | 36 | org.springframework.cloud 37 | spring-cloud-starter-openfeign 38 | 39 | 40 | 41 | org.springframework.boot 42 | spring-boot-starter-test 43 | test 44 | 45 | 46 | 47 | org.springframework.boot 48 | spring-boot-starter-aop 49 | 50 | 51 | org.springframework.boot 52 | spring-boot-autoconfigure 53 | 1.5.6.RELEASE 54 | 55 | 56 | 57 | 58 | io.jsonwebtoken 59 | jjwt 60 | 0.7.0 61 | 62 | 63 | com.fasterxml 64 | classmate 65 | 1.3.4 66 | 67 | 68 | 69 | org.mapstruct 70 | mapstruct-jdk8 71 | ${org.mapstruct.version} 72 | 73 | 74 | org.apache.commons 75 | commons-lang3 76 | 3.7 77 | 78 | 79 | com.alibaba 80 | fastjson 81 | RELEASE 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | org.springframework.cloud 90 | spring-cloud-dependencies 91 | ${spring-cloud.version} 92 | pom 93 | import 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/annotation/Log.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Log { 11 | String value() default ""; 12 | } 13 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/aspect/LogAspect.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.aspect; 2 | 3 | import com.bootdo.clouddocommon.annotation.Log; 4 | import com.bootdo.clouddocommon.context.FilterContextHandler; 5 | import com.bootdo.clouddocommon.dto.LogDO; 6 | import com.bootdo.clouddocommon.service.LogRpcService; 7 | import com.bootdo.clouddocommon.utils.HttpContextUtils; 8 | import com.bootdo.clouddocommon.utils.IPUtils; 9 | import com.bootdo.clouddocommon.utils.JSONUtils; 10 | import org.aspectj.lang.ProceedingJoinPoint; 11 | import org.aspectj.lang.annotation.Around; 12 | import org.aspectj.lang.annotation.Aspect; 13 | import org.aspectj.lang.annotation.Pointcut; 14 | import org.aspectj.lang.reflect.MethodSignature; 15 | import org.slf4j.Logger; 16 | import org.slf4j.LoggerFactory; 17 | import org.springframework.beans.factory.annotation.Autowired; 18 | import org.springframework.stereotype.Component; 19 | 20 | import javax.servlet.http.HttpServletRequest; 21 | import java.lang.reflect.Method; 22 | import java.util.Date; 23 | 24 | @Aspect 25 | @Component 26 | public class LogAspect { 27 | private static final Logger logger = LoggerFactory.getLogger(LogAspect.class); 28 | 29 | @Autowired 30 | LogRpcService logService; 31 | 32 | 33 | @Pointcut("@annotation(com.bootdo.clouddocommon.annotation.Log)") 34 | public void logPointCut() { 35 | } 36 | 37 | @Around("logPointCut()") 38 | public Object around(ProceedingJoinPoint point) throws Throwable { 39 | long beginTime = System.currentTimeMillis(); 40 | // 执行方法 41 | Object result = point.proceed(); 42 | // 执行时长(毫秒) 43 | long time = System.currentTimeMillis() - beginTime; 44 | //异步保存日志 45 | saveLog(point, time); 46 | return result; 47 | } 48 | 49 | void saveLog(ProceedingJoinPoint joinPoint, long time) throws InterruptedException { 50 | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); 51 | Method method = signature.getMethod(); 52 | LogDO sysLog = new LogDO(); 53 | Log syslog = method.getAnnotation(Log.class); 54 | if (syslog != null) { 55 | // 注解上的描述 56 | sysLog.setOperation(syslog.value()); 57 | } 58 | // 请求的方法名 59 | String className = joinPoint.getTarget().getClass().getName(); 60 | String methodName = signature.getName(); 61 | sysLog.setMethod(className + "." + methodName + "()"); 62 | // 请求的参数 63 | Object[] args = joinPoint.getArgs(); 64 | try { 65 | String params = JSONUtils.beanToJson(args[0]).substring(0, 4999); 66 | sysLog.setParams(params); 67 | } catch (Exception e) { 68 | 69 | } 70 | // 获取request 71 | HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); 72 | // 设置IP地址 73 | sysLog.setIp(IPUtils.getIpAddr(request)); 74 | // 用户名 75 | 76 | sysLog.setUserId(Long.parseLong(FilterContextHandler.getUserID() == null ? "000000" : FilterContextHandler.getUserID())); 77 | sysLog.setUsername(FilterContextHandler.getUsername() == null ? "" : FilterContextHandler.getUsername()); 78 | sysLog.setTime((int) time); 79 | // 系统当前时间 80 | Date date = new Date(); 81 | sysLog.setGmtCreate(date); 82 | // 保存系统日志 83 | logService.save(sysLog); 84 | } 85 | } 86 | 87 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/aspect/WebLogAspect.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.aspect; 2 | 3 | import org.aspectj.lang.JoinPoint; 4 | import org.aspectj.lang.ProceedingJoinPoint; 5 | import org.aspectj.lang.annotation.*; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.stereotype.Component; 9 | import org.springframework.web.context.request.RequestContextHolder; 10 | import org.springframework.web.context.request.ServletRequestAttributes; 11 | 12 | import javax.servlet.http.HttpServletRequest; 13 | import java.util.Arrays; 14 | 15 | @Aspect 16 | @Component 17 | public class WebLogAspect { 18 | private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class); 19 | 20 | @Pointcut("execution( * com.bootdo..controller.*.*(..))")//两个..代表所有子目录,最后括号里的两个..代表所有参数 21 | public void logPointCut() { 22 | } 23 | 24 | @Before("logPointCut()") 25 | public void doBefore(JoinPoint joinPoint){ 26 | ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 27 | HttpServletRequest request = requestAttributes.getRequest(); 28 | logger.info("请求地址 : " +request.getRequestURL().toString()); 29 | logger.info("HTTP METHOD : " + request.getMethod()); 30 | // 获取真实的ip地址 31 | //logger.info("IP : " + IPAddressUtil.getClientIpAddress(request)); 32 | logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." 33 | + joinPoint.getSignature().getName()); 34 | logger.info("参数 : " + Arrays.toString(joinPoint.getArgs())); 35 | } 36 | @AfterReturning(returning = "ret", pointcut = "logPointCut()")// returning的值和doAfterReturning的参数名一致 37 | public void doAfterReturning(Object ret) throws Throwable { 38 | // 处理完请求,返回内容(返回值太复杂时,打印的是物理存储空间的地址) 39 | logger.debug("返回值 : " + ret); 40 | } 41 | 42 | @Around("logPointCut()") 43 | public Object doAround(ProceedingJoinPoint pjp) throws Throwable { 44 | long startTime = System.currentTimeMillis(); 45 | Object ob = pjp.proceed();// ob 为方法的返回值 46 | logger.info("耗时 : " + (System.currentTimeMillis() - startTime)); 47 | return ob; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/config/AsyncConfig.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.scheduling.annotation.EnableAsync; 5 | 6 | @Configuration 7 | @EnableAsync 8 | public class AsyncConfig { 9 | } 10 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/constants/CommonConstants.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.constants; 2 | 3 | public class CommonConstants { 4 | public final static String CONTEXT_TOKEN="Authorization"; 5 | public final static String CONTEXT_USERNAME="contextUsername"; 6 | public final static String CONTEXT_USER_ID="contextUserId"; 7 | public final static String CONTEXT_NAME="contextName"; 8 | public final static String JWT_PRIVATE_KEY ="wwwbootdocom"; 9 | public final static String RENEWAL_TIME = "renewalTime"; 10 | public final static String TOKEN = "token"; 11 | } 12 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/context/FilterContextHandler.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.context; 2 | 3 | import com.bootdo.clouddocommon.constants.CommonConstants; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class FilterContextHandler { 9 | public static ThreadLocal> threadLocal = new ThreadLocal>(); 10 | 11 | public static void set(String key, Object value) { 12 | Map map = threadLocal.get(); 13 | if (map == null) { 14 | map = new HashMap(); 15 | threadLocal.set(map); 16 | } 17 | map.put(key, value); 18 | } 19 | 20 | public static Object get(String key) { 21 | Map map = threadLocal.get(); 22 | if (map == null) { 23 | map = new HashMap(); 24 | threadLocal.set(map); 25 | } 26 | return map.get(key); 27 | } 28 | 29 | public static String getUserID() { 30 | Object value = get(CommonConstants.CONTEXT_USER_ID); 31 | return returnObjectValue(value); 32 | } 33 | 34 | public static String getUsername() { 35 | Object value = get(CommonConstants.CONTEXT_USERNAME); 36 | return returnObjectValue(value); 37 | } 38 | 39 | 40 | public static String getName() { 41 | Object value = get(CommonConstants.CONTEXT_NAME); 42 | return returnObjectValue(value); 43 | } 44 | 45 | public static String getToken() { 46 | Object value = get(CommonConstants.CONTEXT_TOKEN); 47 | return returnObjectValue(value); 48 | } 49 | 50 | public static void setToken(String token) { 51 | set(CommonConstants.CONTEXT_TOKEN, token); 52 | } 53 | 54 | public static void setName(String name) { 55 | set(CommonConstants.CONTEXT_NAME, name); 56 | } 57 | 58 | public static void setUserID(String userID) { 59 | set(CommonConstants.CONTEXT_USER_ID, userID); 60 | } 61 | 62 | public static void setUsername(String username) { 63 | set(CommonConstants.CONTEXT_USERNAME, username); 64 | } 65 | 66 | private static String returnObjectValue(Object value) { 67 | return value == null ? null : value.toString(); 68 | } 69 | 70 | public static void remove() { 71 | threadLocal.remove(); 72 | } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/BTree.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto; 2 | 3 | import java.util.List; 4 | 5 | public interface BTree { 6 | String getId(); 7 | void setId(String id); 8 | List getChildren(); 9 | void setChildren(List bTrees); 10 | } 11 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/LogDO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonFormat; 4 | 5 | import java.util.Date; 6 | 7 | public class LogDO { 8 | private Long id; 9 | 10 | private Long userId; 11 | 12 | private String username; 13 | 14 | private String operation; 15 | 16 | private Integer time; 17 | 18 | private String method; 19 | 20 | private String params; 21 | 22 | private String ip; 23 | @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") 24 | private Date gmtCreate; 25 | 26 | public Long getId() { 27 | return id; 28 | } 29 | 30 | public void setId(Long id) { 31 | this.id = id; 32 | } 33 | 34 | public Long getUserId() { 35 | return userId; 36 | } 37 | 38 | public void setUserId(Long userId) { 39 | this.userId = userId; 40 | } 41 | 42 | public String getUsername() { 43 | return username; 44 | } 45 | 46 | public void setUsername(String username) { 47 | this.username = username == null ? null : username.trim(); 48 | } 49 | 50 | public String getOperation() { 51 | return operation; 52 | } 53 | 54 | public void setOperation(String operation) { 55 | this.operation = operation == null ? null : operation.trim(); 56 | } 57 | 58 | public Integer getTime() { 59 | return time; 60 | } 61 | 62 | public void setTime(Integer time) { 63 | this.time = time; 64 | } 65 | 66 | public String getMethod() { 67 | return method; 68 | } 69 | 70 | public void setMethod(String method) { 71 | this.method = method == null ? null : method.trim(); 72 | } 73 | 74 | public String getParams() { 75 | return params; 76 | } 77 | 78 | public void setParams(String params) { 79 | this.params = params == null ? null : params.trim(); 80 | } 81 | 82 | public String getIp() { 83 | return ip; 84 | } 85 | 86 | public void setIp(String ip) { 87 | this.ip = ip == null ? null : ip.trim(); 88 | } 89 | 90 | public Date getGmtCreate() { 91 | return gmtCreate; 92 | } 93 | 94 | public void setGmtCreate(Date gmtCreate) { 95 | this.gmtCreate = gmtCreate; 96 | } 97 | 98 | @Override 99 | public String toString() { 100 | return "LogDO{" + 101 | "id=" + id + 102 | ", userId=" + userId + 103 | ", username='" + username + '\'' + 104 | ", operation='" + operation + '\'' + 105 | ", time=" + time + 106 | ", method='" + method + '\'' + 107 | ", params='" + params + '\'' + 108 | ", ip='" + ip + '\'' + 109 | ", gmtCreate=" + gmtCreate + 110 | '}'; 111 | } 112 | } -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/LoginDTO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | public class LoginDTO { 6 | @NotNull 7 | private String username; 8 | @NotNull 9 | private String pwd; 10 | 11 | public String getUsername() { 12 | return username; 13 | } 14 | 15 | public void setUsername(String username) { 16 | this.username = username; 17 | } 18 | 19 | public String getPwd() { 20 | return pwd; 21 | } 22 | 23 | public void setPwd(String password) { 24 | this.pwd = password; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/LoginUserDTO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto; 2 | 3 | public class LoginUserDTO { 4 | /** 5 | * 用户id 6 | */ 7 | private String userId; 8 | /** 9 | * 用户登录名 10 | */ 11 | private String username; 12 | /** 13 | * 用户真实姓名 14 | */ 15 | private String name; 16 | 17 | public String getUserId() { 18 | return userId; 19 | } 20 | 21 | public void setUserId(String userId) { 22 | this.userId = userId; 23 | } 24 | 25 | public String getUsername() { 26 | return username; 27 | } 28 | 29 | public void setUsername(String username) { 30 | this.username = username; 31 | } 32 | 33 | public String getName() { 34 | return name; 35 | } 36 | 37 | public void setName(String name) { 38 | this.name = name; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/MenuDTO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto; 2 | 3 | import java.io.Serializable; 4 | 5 | public class MenuDTO implements Serializable{ 6 | private static final long SerializableId = 0l; 7 | private Long menuId; 8 | // 父菜单ID,一级菜单为0 9 | private Long parentId; 10 | // 菜单名称 11 | private String name; 12 | // 菜单URL 13 | private String url; 14 | // 授权(多个用逗号分隔,如:user:list,user:create) 15 | private String perms; 16 | // 类型 0:目录 1:菜单 2:按钮 17 | private Integer type; 18 | 19 | public Long getMenuId() { 20 | return menuId; 21 | } 22 | 23 | public void setMenuId(Long menuId) { 24 | this.menuId = menuId; 25 | } 26 | 27 | public Long getParentId() { 28 | return parentId; 29 | } 30 | 31 | public void setParentId(Long parentId) { 32 | this.parentId = parentId; 33 | } 34 | 35 | public String getName() { 36 | return name; 37 | } 38 | 39 | public void setName(String name) { 40 | this.name = name; 41 | } 42 | 43 | public String getUrl() { 44 | return url; 45 | } 46 | 47 | public void setUrl(String url) { 48 | this.url = url; 49 | } 50 | 51 | public String getPerms() { 52 | return perms; 53 | } 54 | 55 | public void setPerms(String perms) { 56 | this.perms = perms; 57 | } 58 | 59 | public Integer getType() { 60 | return type; 61 | } 62 | 63 | public void setType(Integer type) { 64 | this.type = type; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/RouterDTO.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto; 2 | 3 | import java.io.Serializable; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | public class RouterDTO implements Serializable { 8 | private String path; 9 | private String component; 10 | private Long id; 11 | private String name; 12 | 13 | private String redirect; 14 | /** 15 | * 是否为叶子节点 16 | */ 17 | private boolean leaf; 18 | private boolean menuShow; 19 | private Long parentId; 20 | private String iconCls; 21 | List children; 22 | 23 | public Long getId() { 24 | return id; 25 | } 26 | 27 | public void setId(Long id) { 28 | this.id = id; 29 | } 30 | 31 | public String getPath() { 32 | return path; 33 | } 34 | 35 | public void setPath(String path) { 36 | this.path = path; 37 | } 38 | 39 | public String getName() { 40 | return name; 41 | } 42 | 43 | public void setName(String name) { 44 | this.name = name; 45 | } 46 | 47 | public String getComponent() { 48 | return component; 49 | } 50 | 51 | public void setComponent(String component) { 52 | this.component = component; 53 | } 54 | 55 | public String getRedirect() { 56 | return redirect; 57 | } 58 | 59 | public void setRedirect(String redirect) { 60 | this.redirect = redirect; 61 | } 62 | 63 | public boolean getLeaf() { 64 | return leaf; 65 | } 66 | 67 | public void setLeaf(boolean leaf) { 68 | this.leaf = leaf; 69 | } 70 | 71 | public boolean getMenuShow() { 72 | return menuShow; 73 | } 74 | 75 | public void setMenuShow(boolean menuShow) { 76 | this.menuShow = menuShow; 77 | } 78 | 79 | public Long getParentId() { 80 | return parentId; 81 | } 82 | 83 | public void setParentId(Long parentId) { 84 | this.parentId = parentId; 85 | } 86 | 87 | public boolean isLeaf() { 88 | return leaf; 89 | } 90 | 91 | public String getIconCls() { 92 | return iconCls; 93 | } 94 | 95 | public void setIconCls(String iconCls) { 96 | this.iconCls = iconCls; 97 | } 98 | 99 | public List getChildren() { 100 | return children; 101 | } 102 | 103 | public void setChildren(List children) { 104 | this.children = children; 105 | } 106 | 107 | public static List buildList(List nodes, Long idParam) { 108 | if (nodes == null) { 109 | return null; 110 | } 111 | List topNodes = new ArrayList(); 112 | for (RouterDTO child : nodes) { 113 | Long pid = child.getParentId(); 114 | if (pid == null || idParam == pid) { 115 | topNodes.add(child); 116 | continue; 117 | } 118 | for (RouterDTO parent : nodes) { 119 | Long id = parent.getId(); 120 | if (id != null && id.equals(pid)) { 121 | parent.getChildren().add(child); 122 | // child.setHasParent(true); 123 | // parent.setChildren(true); 124 | //parent.setLeaf(false); 125 | continue; 126 | } else { 127 | // parent.setLeaf(true); 128 | } 129 | } 130 | } 131 | return topNodes; 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/UserToken.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author bootdo 1992lcg@163.com 7 | * @version V1.0 8 | */ 9 | public class UserToken implements Serializable{ 10 | private static final long serialVersionUID = 1L; 11 | 12 | public UserToken(String username, String userId, String name) { 13 | this.userId = userId; 14 | this.username = username; 15 | this.name = name; 16 | } 17 | 18 | /** 19 | * 用户id 20 | */ 21 | private String userId; 22 | /** 23 | * 用户登录名 24 | */ 25 | private String username; 26 | /** 27 | * 用户真实姓名 28 | */ 29 | private String name; 30 | 31 | public String getUserId() { 32 | return userId; 33 | } 34 | 35 | public void setUserId(String userId) { 36 | this.userId = userId; 37 | } 38 | 39 | public String getUsername() { 40 | return username; 41 | } 42 | 43 | public void setUsername(String username) { 44 | this.username = username; 45 | } 46 | 47 | public String getName() { 48 | return name; 49 | } 50 | 51 | public void setName(String name) { 52 | this.name = name; 53 | } 54 | 55 | @Override 56 | public String toString() { 57 | return "UserToken{" + 58 | "userId=" + userId + 59 | ", username='" + username + '\'' + 60 | ", name='" + name + '\'' + 61 | '}'; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/dto/do2dto/MenuConvert.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.dto.do2dto; 2 | 3 | public interface MenuConvert { 4 | } 5 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CommonExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.exception; 2 | 3 | import com.bootdo.clouddocommon.utils.R; 4 | import org.springframework.web.bind.annotation.ExceptionHandler; 5 | import org.springframework.web.bind.annotation.RestControllerAdvice; 6 | 7 | @RestControllerAdvice 8 | public class CommonExceptionHandler { 9 | @ExceptionHandler(Exception.class) 10 | R exception(Exception e) { 11 | return R.error(500, e.getMessage()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/filter/ContextFilter.java: -------------------------------------------------------------------------------- 1 | //package com.bootdo.clouddocommon.filter; 2 | // 3 | //import com.bootdo.clouddocommon.constants.CommonConstants; 4 | //import com.bootdo.clouddocommon.context.FilterContextHandler; 5 | //import com.bootdo.clouddocommon.dto.UserToken; 6 | //import com.bootdo.clouddocommon.utils.JSONUtils; 7 | //import com.bootdo.clouddocommon.utils.JwtUtils; 8 | //import com.bootdo.clouddocommon.utils.R; 9 | //import com.bootdo.clouddocommon.utils.StringUtils; 10 | // 11 | //import javax.servlet.*; 12 | //import javax.servlet.http.HttpServletRequest; 13 | //import javax.servlet.http.HttpServletResponse; 14 | //import java.io.IOException; 15 | //import java.io.PrintWriter; 16 | // 17 | //public class ContextFilter implements Filter { 18 | // @Override 19 | // public void init(FilterConfig filterConfig) throws ServletException { 20 | // 21 | // } 22 | // 23 | // @Override 24 | // public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 25 | // HttpServletRequest request = (HttpServletRequest) servletRequest; 26 | // HttpServletResponse response = (HttpServletResponse) servletResponse; 27 | // response.setCharacterEncoding("utf-8"); 28 | // response.setContentType("application/json;charset=UTF-8"); 29 | // if (request.getRequestURI().startsWith("/test")) { 30 | // filterChain.doFilter(request, response); 31 | // return; 32 | // } 33 | // String token = request.getHeader(CommonConstants.CONTEXT_TOKEN); 34 | // if(StringUtils.isBlank(token)){ 35 | // token = request.getParameter(CommonConstants.TOKEN); 36 | // } 37 | // UserToken userToken = null; 38 | // try { 39 | // userToken = JwtUtils.getInfoFromToken(token); 40 | // } catch (Exception e) { 41 | // PrintWriter printWriter = response.getWriter(); 42 | // printWriter.write(JSONUtils.beanToJson(R.error401())); 43 | // return; 44 | // } 45 | // FilterContextHandler.setToken(token); 46 | // FilterContextHandler.setUsername(userToken.getUsername()); 47 | // FilterContextHandler.setName(userToken.getName()); 48 | // FilterContextHandler.setUserID(userToken.getUserId()); 49 | // filterChain.doFilter(request, response); 50 | // } 51 | // 52 | // @Override 53 | // public void destroy() { 54 | // 55 | // } 56 | //} 57 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/intercepter/AuthIntercepter.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.intercepter; 2 | 3 | import com.bootdo.clouddocommon.constants.CommonConstants; 4 | import com.bootdo.clouddocommon.context.FilterContextHandler; 5 | import com.bootdo.clouddocommon.dto.UserToken; 6 | import com.bootdo.clouddocommon.utils.JwtUtils; 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | import org.springframework.web.method.HandlerMethod; 10 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 11 | 12 | import javax.servlet.http.HttpServletRequest; 13 | import javax.servlet.http.HttpServletResponse; 14 | 15 | public class AuthIntercepter extends HandlerInterceptorAdapter { 16 | private static final Logger logger = LoggerFactory.getLogger(HandlerInterceptorAdapter.class); 17 | 18 | @Override 19 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 20 | String token = request.getHeader(CommonConstants.CONTEXT_TOKEN); 21 | UserToken userToken = JwtUtils.getInfoFromToken(token); 22 | FilterContextHandler.setToken(token); 23 | logger.info("------设置token"+Thread.currentThread().getId()); 24 | FilterContextHandler.setUsername(userToken.getUsername()); 25 | FilterContextHandler.setName(userToken.getName()); 26 | FilterContextHandler.setUserID(userToken.getUserId()); 27 | return super.preHandle(request, response, handler); 28 | } 29 | 30 | @Override 31 | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 32 | FilterContextHandler.remove(); 33 | super.afterCompletion(request, response, handler, ex); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/intercepter/FeignIntercepter.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.intercepter; 2 | 3 | import com.bootdo.clouddocommon.constants.CommonConstants; 4 | import com.bootdo.clouddocommon.context.FilterContextHandler; 5 | import feign.RequestInterceptor; 6 | import feign.RequestTemplate; 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | 10 | public class FeignIntercepter implements RequestInterceptor { 11 | private static final Logger logger = LoggerFactory.getLogger(RequestInterceptor.class); 12 | 13 | @Override 14 | public void apply(RequestTemplate requestTemplate) { 15 | logger.info("------feign设置token" + Thread.currentThread().getId()); 16 | requestTemplate.header(CommonConstants.CONTEXT_TOKEN, FilterContextHandler.getToken()); 17 | } 18 | } -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/service/LogRpcService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.service; 2 | 3 | import com.bootdo.clouddocommon.dto.LogDO; 4 | import com.bootdo.clouddocommon.intercepter.FeignIntercepter; 5 | import com.bootdo.clouddocommon.utils.R; 6 | import feign.Headers; 7 | import org.springframework.cloud.openfeign.FeignClient; 8 | import org.springframework.scheduling.annotation.Async; 9 | import org.springframework.web.bind.annotation.PostMapping; 10 | 11 | @Headers("Content-Type:application/json") 12 | @FeignClient(name = "api-base", configuration = FeignIntercepter.class) 13 | public interface LogRpcService { 14 | @Async 15 | @PostMapping("log/save") 16 | R save(LogDO logDO); 17 | } 18 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/FileUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import java.io.File; 4 | import java.io.FileOutputStream; 5 | import java.io.IOException; 6 | import java.nio.ByteBuffer; 7 | import java.nio.channels.FileChannel; 8 | import java.util.UUID; 9 | 10 | public class FileUtils { 11 | public static String saveFile(byte[] file, String filePath, String fileName) { 12 | int random = (int) (Math.random() * 100 + 1); 13 | int random1 = (int) (Math.random() * 100 + 1); 14 | filePath = filePath + random + File.separator + random1 + File.separator; 15 | File targetFile = new File(filePath); 16 | if (!targetFile.exists()) { 17 | targetFile.mkdirs(); 18 | } 19 | FileOutputStream fileOutputStream = null; 20 | try { 21 | fileOutputStream = new FileOutputStream(filePath + fileName); 22 | FileChannel fileChannel = fileOutputStream.getChannel(); 23 | ByteBuffer buf = ByteBuffer.wrap(file); 24 | while (fileChannel.write(buf) != 0) { 25 | } 26 | } catch (Exception e) { 27 | 28 | } finally { 29 | if (fileOutputStream != null) { 30 | try { 31 | fileOutputStream.close(); 32 | } catch (IOException e) { 33 | e.printStackTrace(); 34 | } 35 | } 36 | } 37 | //url 38 | return random + "/" + random1 + "/" + fileName; 39 | } 40 | 41 | public static boolean deleteFile(String fileName) { 42 | File file = new File(fileName); 43 | // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除 44 | if (file.exists() && file.isFile()) { 45 | if (file.delete()) { 46 | return true; 47 | } else { 48 | return false; 49 | } 50 | } else { 51 | return false; 52 | } 53 | } 54 | 55 | public static String renameToUUID(String fileName) { 56 | return UUID.randomUUID() + "." + fileName.substring(fileName.lastIndexOf(".") + 1); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/HttpContextUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import org.springframework.web.context.request.RequestContextHolder; 4 | import org.springframework.web.context.request.ServletRequestAttributes; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | 8 | public class HttpContextUtils { 9 | public static HttpServletRequest getHttpServletRequest() { 10 | return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/HttpServletUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | public class HttpServletUtils { 6 | public static boolean jsAjax(HttpServletRequest req){ 7 | //判断是否为ajax请求,默认不是 8 | boolean isAjaxRequest = false; 9 | if(!StringUtils.isBlank(req.getHeader("x-requested-with")) && req.getHeader("x-requested-with").equals("XMLHttpRequest")){ 10 | isAjaxRequest = true; 11 | } 12 | return isAjaxRequest; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/IPUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | 8 | public class IPUtils { 9 | private static Logger logger = LoggerFactory.getLogger(IPUtils.class); 10 | 11 | /** 12 | * 获取IP地址 13 | * 14 | * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 15 | * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 16 | */ 17 | public static String getIpAddr(HttpServletRequest request) { 18 | 19 | String ip = request.getHeader("x-forwarded-for"); 20 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 21 | ip = request.getHeader("Proxy-Client-IP"); 22 | } 23 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 24 | ip = request.getHeader("WL-Proxy-Client-IP"); 25 | } 26 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 27 | ip = request.getRemoteAddr(); 28 | } 29 | return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/JSONUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.alibaba.fastjson.JSONObject; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class JSONUtils { 10 | /** 11 | * Bean对象转JSON 12 | * 13 | * @param object 14 | * @param dataFormatString 15 | * @return 16 | */ 17 | public static String beanToJson(Object object, String dataFormatString) { 18 | if (object != null) { 19 | if (StringUtils.isEmpty(dataFormatString)) { 20 | return JSONObject.toJSONString(object); 21 | } 22 | return JSON.toJSONStringWithDateFormat(object, dataFormatString); 23 | } else { 24 | return null; 25 | } 26 | } 27 | 28 | /** 29 | * Bean对象转JSON 30 | * 31 | * @param object 32 | * @return 33 | */ 34 | public static String beanToJson(Object object) { 35 | if (object != null) { 36 | return JSON.toJSONString(object); 37 | } else { 38 | return null; 39 | } 40 | } 41 | 42 | /** 43 | * String转JSON字符串 44 | * 45 | * @param key 46 | * @param value 47 | * @return 48 | */ 49 | public static String stringToJsonByFastjson(String key, String value) { 50 | if (StringUtils.isEmpty(key) || StringUtils.isEmpty(value)) { 51 | return null; 52 | } 53 | Map map = new HashMap(16); 54 | map.put(key, value); 55 | return beanToJson(map, null); 56 | } 57 | 58 | /** 59 | * 将json字符串转换成对象 60 | * 61 | * @param json 62 | * @param clazz 63 | * @return 64 | */ 65 | public static Object jsonToBean(String json, Object clazz) { 66 | if (StringUtils.isEmpty(json) || clazz == null) { 67 | return null; 68 | } 69 | return JSON.parseObject(json, clazz.getClass()); 70 | } 71 | 72 | /** 73 | * json字符串转map 74 | * 75 | * @param json 76 | * @return 77 | */ 78 | @SuppressWarnings("unchecked") 79 | public static Map jsonToMap(String json) { 80 | if (StringUtils.isEmpty(json)) { 81 | return null; 82 | } 83 | return JSON.parseObject(json, Map.class); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/JwtUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import com.bootdo.clouddocommon.constants.CommonConstants; 4 | import com.bootdo.clouddocommon.dto.UserToken; 5 | import io.jsonwebtoken.Claims; 6 | import io.jsonwebtoken.Jwts; 7 | import io.jsonwebtoken.SignatureAlgorithm; 8 | 9 | import java.util.Date; 10 | 11 | /** 12 | * @author bootdo 1992lcg@163.com 13 | * @version V1.0 14 | */ 15 | public class JwtUtils { 16 | public static String generateToken(UserToken userToken, int expire) throws Exception { 17 | String token = Jwts.builder() 18 | .setSubject(userToken.getUsername()) 19 | .claim(CommonConstants.CONTEXT_USER_ID, userToken.getUserId()) 20 | .claim(CommonConstants.CONTEXT_NAME, userToken.getName()) 21 | .claim(CommonConstants.RENEWAL_TIME,new Date(System.currentTimeMillis()+expire/2)) 22 | .setExpiration(new Date(System.currentTimeMillis()+expire)) 23 | .signWith(SignatureAlgorithm.HS256, CommonConstants.JWT_PRIVATE_KEY) 24 | .compact(); 25 | return token; 26 | } 27 | 28 | 29 | public static UserToken getInfoFromToken(String token) throws Exception { 30 | Claims claims = Jwts.parser() 31 | .setSigningKey(CommonConstants.JWT_PRIVATE_KEY).parseClaimsJws(token) 32 | .getBody(); 33 | return new UserToken(claims.getSubject(), claims.get(CommonConstants.CONTEXT_USER_ID).toString(),claims.get(CommonConstants.CONTEXT_NAME).toString()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/PageUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | /** 7 | * @Author bootdo 1992lcg@163.com 8 | */ 9 | public class PageUtils implements Serializable { 10 | private static final long serialVersionUID = 1L; 11 | private int total; 12 | private List rows; 13 | 14 | public PageUtils(List list, int total) { 15 | this.rows = list; 16 | this.total = total; 17 | } 18 | 19 | public int getTotal() { 20 | return total; 21 | } 22 | 23 | public void setTotal(int total) { 24 | this.total = total; 25 | } 26 | 27 | public List getRows() { 28 | return rows; 29 | } 30 | 31 | public void setRows(List rows) { 32 | this.rows = rows; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/Query.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import java.util.LinkedHashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * 查询参数 8 | */ 9 | public class Query extends LinkedHashMap { 10 | private static final long serialVersionUID = 1L; 11 | private int offset; 12 | private int limit; 13 | private int page; 14 | 15 | /** 16 | * 可以根据 offset和limit查询,也可以根据page和limit查询 17 | * @param params 18 | */ 19 | public Query(Map params) { 20 | this.putAll(params); 21 | if (null != params.get("limit")) { 22 | this.limit = Integer.parseInt(params.get("limit").toString()); 23 | if (null != params.get("offset")) { 24 | this.offset = Integer.parseInt(params.get("offset").toString()); 25 | this.put("limit", limit); 26 | } 27 | if (null != params.get("page")) { 28 | this.page = Integer.parseInt(params.get("page").toString()); 29 | this.put("offset", (page - 1) * limit); 30 | this.put("limit", limit); 31 | } 32 | } 33 | } 34 | 35 | public int getOffset() { 36 | return offset; 37 | } 38 | 39 | public void setOffset(int offset) { 40 | this.put("offset", offset); 41 | } 42 | 43 | public int getLimit() { 44 | return limit; 45 | } 46 | 47 | public void setLimit(int limit) { 48 | this.limit = limit; 49 | } 50 | 51 | public int getPage() { 52 | return page; 53 | } 54 | 55 | public void setPage(int page) { 56 | this.page = page; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/R.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class R extends HashMap { 7 | private static final long serialVersionUID = 1L; 8 | 9 | public R() { 10 | put("code", 0); 11 | put("msg", "操作成功"); 12 | } 13 | 14 | public static R error() { 15 | return error(500, "操作失败"); 16 | } 17 | 18 | public static R operate(boolean b){ 19 | if(b){ 20 | return R.ok(); 21 | } 22 | return R.error(); 23 | } 24 | 25 | public static R error(String msg) { 26 | return error(500, msg); 27 | } 28 | 29 | public static R error(int code, String msg) { 30 | R r = new R(); 31 | r.put("code", code); 32 | r.put("msg", msg); 33 | return r; 34 | } 35 | 36 | public static R ok(String msg) { 37 | R r = new R(); 38 | r.put("msg", msg); 39 | return r; 40 | } 41 | 42 | public static R ok(Map map) { 43 | R r = new R(); 44 | r.putAll(map); 45 | return r; 46 | } 47 | 48 | public static R ok() { 49 | return new R(); 50 | } 51 | 52 | public static R error401() { 53 | return error(401, "你还没有登录"); 54 | } 55 | 56 | public static R error403() { 57 | return error(403, "你没有访问权限"); 58 | } 59 | 60 | public static R data(Object data){ 61 | return R.ok().put("data",data); 62 | } 63 | 64 | public static R page(Object page){ 65 | return R.ok().put("page",page); 66 | } 67 | 68 | @Override 69 | public R put(String key, Object value) { 70 | super.put(key, value); 71 | return this; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /clouddo-common/src/main/java/com/bootdo/clouddocommon/utils/StringUtils.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon.utils; 2 | 3 | /** 4 | * @author bootdo 5 | */ 6 | public class StringUtils extends org.apache.commons.lang3.StringUtils{ 7 | } 8 | -------------------------------------------------------------------------------- /clouddo-common/src/test/java/com/bootdo/clouddocommon/ClouddoCommonApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddocommon; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class ClouddoCommonApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /clouddo-server/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.bootdo 7 | clouddo-server 8 | 0.0.1 9 | jar 10 | 11 | clouddo-server 12 | Demo project for Spring Boot 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 2.0.4.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | Finchley.SR1 26 | 27 | 28 | 29 | 30 | org.springframework.cloud 31 | spring-cloud-starter-netflix-eureka-server 32 | 33 | 34 | 35 | org.springframework.boot 36 | spring-boot-starter-test 37 | test 38 | 39 | 40 | 41 | 42 | 43 | 44 | org.springframework.cloud 45 | spring-cloud-dependencies 46 | ${spring-cloud.version} 47 | pom 48 | import 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | org.springframework.boot 57 | spring-boot-maven-plugin 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /clouddo-server/src/main/java/com/bootdo/clouddoserver/ClouddoServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoserver; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class ClouddoServerApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(ClouddoServerApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /clouddo-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8001 3 | 4 | eureka: 5 | instance: 6 | hostname: localhost 7 | client: 8 | registerWithEureka: false 9 | fetchRegistry: false 10 | serviceUrl: 11 | defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ -------------------------------------------------------------------------------- /clouddo-server/src/test/java/com/bootdo/clouddoserver/ClouddoServerApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddoserver; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class ClouddoServerApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /clouddo-zuul/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.bootdo 7 | clouddo-zuul 8 | 0.0.1 9 | jar 10 | 11 | clouddo-zuul 12 | 公用包 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 2.0.4.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | Finchley.SR1 26 | 27 | 28 | 29 | 30 | org.springframework.cloud 31 | spring-cloud-starter-netflix-eureka-server 32 | 33 | 34 | org.springframework.cloud 35 | spring-cloud-starter-netflix-zuul 36 | 37 | 38 | 39 | org.springframework.cloud 40 | spring-cloud-starter-openfeign 41 | 42 | 43 | 44 | io.jsonwebtoken 45 | jjwt 46 | 0.7.0 47 | 48 | 49 | 50 | org.springframework.boot 51 | spring-boot-starter-test 52 | test 53 | 54 | 55 | com.bootdo 56 | clouddo-common 57 | 0.0.1-SNAPSHOT 58 | 59 | 60 | 61 | org.springframework.cloud 62 | spring-cloud-starter-netflix-ribbon 63 | 64 | 65 | 66 | org.springframework.cloud 67 | spring-cloud-starter-netflix-hystrix 68 | 69 | 70 | 71 | 72 | 73 | 74 | org.springframework.cloud 75 | spring-cloud-dependencies 76 | ${spring-cloud.version} 77 | pom 78 | import 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | org.springframework.boot 87 | spring-boot-maven-plugin 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /clouddo-zuul/src/main/java/com/bootdo/clouddozuul/ClouddoZuulApplication.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddozuul; 2 | 3 | import com.bootdo.clouddozuul.filter.AccessFilter; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 7 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 8 | import org.springframework.cloud.openfeign.EnableFeignClients; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.web.cors.CorsConfiguration; 11 | import org.springframework.web.cors.UrlBasedCorsConfigurationSource; 12 | import org.springframework.web.filter.CorsFilter; 13 | 14 | @EnableFeignClients 15 | @EnableZuulProxy 16 | @EnableEurekaClient 17 | @SpringBootApplication 18 | public class ClouddoZuulApplication { 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(ClouddoZuulApplication.class, args); 22 | } 23 | 24 | @Bean 25 | public AccessFilter accessFilter(){ 26 | return new AccessFilter(); 27 | } 28 | 29 | @Bean 30 | public CorsFilter corsFilter() { 31 | final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 32 | final CorsConfiguration config = new CorsConfiguration(); 33 | config.setAllowCredentials(true); // 允许cookies跨域 34 | config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin 35 | config.addAllowedHeader("*");// #允许访问的头信息,*表示全部 36 | config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了 37 | config.addAllowedMethod("OPTIONS");// 允许提交请求的方法,*表示全部允许 38 | config.addAllowedMethod("HEAD"); 39 | config.addAllowedMethod("GET");// 允许Get的请求方法 40 | config.addAllowedMethod("PUT"); 41 | config.addAllowedMethod("POST"); 42 | config.addAllowedMethod("DELETE"); 43 | config.addAllowedMethod("PATCH"); 44 | source.registerCorsConfiguration("/**", config); 45 | return new CorsFilter(source); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /clouddo-zuul/src/main/java/com/bootdo/clouddozuul/controller/LoginController.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddozuul.controller; 2 | 3 | import com.bootdo.clouddocommon.constants.CommonConstants; 4 | import com.bootdo.clouddocommon.context.FilterContextHandler; 5 | import com.bootdo.clouddocommon.dto.MenuDTO; 6 | import com.bootdo.clouddozuul.prc.admin.MenuService; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | import javax.servlet.http.HttpServletRequest; 12 | import java.util.List; 13 | 14 | /** 15 | * @version V1.0 16 | */ 17 | @RestController 18 | public class LoginController { 19 | @Autowired 20 | MenuService menuService; 21 | @GetMapping({"/test"}) 22 | List login(HttpServletRequest request) { 23 | FilterContextHandler.setToken(request.getHeader(CommonConstants.CONTEXT_TOKEN)); 24 | return menuService.userMenus(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /clouddo-zuul/src/main/java/com/bootdo/clouddozuul/filter/AccessFilter.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddozuul.filter; 2 | 3 | import com.bootdo.clouddocommon.constants.CommonConstants; 4 | import com.bootdo.clouddocommon.context.FilterContextHandler; 5 | import com.bootdo.clouddocommon.dto.MenuDTO; 6 | import com.bootdo.clouddocommon.dto.UserToken; 7 | import com.bootdo.clouddocommon.utils.JSONUtils; 8 | import com.bootdo.clouddocommon.utils.JwtUtils; 9 | import com.bootdo.clouddocommon.utils.R; 10 | import com.bootdo.clouddocommon.utils.StringUtils; 11 | import com.bootdo.clouddozuul.prc.admin.MenuService; 12 | import com.netflix.zuul.ZuulFilter; 13 | import com.netflix.zuul.context.RequestContext; 14 | import org.springframework.beans.factory.annotation.Autowired; 15 | import org.springframework.web.context.request.RequestContextHolder; 16 | import org.springframework.web.multipart.MultipartRequest; 17 | 18 | import javax.servlet.http.HttpServletRequest; 19 | import javax.servlet.http.HttpServletResponse; 20 | import java.io.IOException; 21 | import java.io.PrintWriter; 22 | import java.util.List; 23 | import java.util.Set; 24 | 25 | /** 26 | * @version V1.0 27 | * @Author bootdo 1992lcg@163.com 28 | */ 29 | public class AccessFilter extends ZuulFilter { 30 | @Autowired 31 | MenuService menuService; 32 | 33 | 34 | private String ignorePath = "/api-admin/login"; 35 | 36 | @Override 37 | public String filterType() { 38 | return "pre"; 39 | } 40 | 41 | @Override 42 | public int filterOrder() { 43 | return 10000; 44 | } 45 | 46 | @Override 47 | public boolean shouldFilter() { 48 | return true; 49 | } 50 | 51 | 52 | @Override 53 | public Object run() { 54 | RequestContext ctx = RequestContext.getCurrentContext(); 55 | HttpServletRequest request = ctx.getRequest(); 56 | final String requestUri = request.getRequestURI(); 57 | if (isStartWith(requestUri)) { 58 | return null; 59 | } 60 | String accessToken = request.getHeader(CommonConstants.CONTEXT_TOKEN); 61 | if(null == accessToken || accessToken == ""){ 62 | accessToken = request.getParameter(CommonConstants.TOKEN); 63 | } 64 | if (null == accessToken) { 65 | setFailedRequest(R.error401(), 200); 66 | return null; 67 | } 68 | try { 69 | UserToken userToken = JwtUtils.getInfoFromToken(accessToken); 70 | } catch (Exception e) { 71 | setFailedRequest(R.error401(), 200); 72 | return null; 73 | } 74 | FilterContextHandler.setToken(accessToken); 75 | if(!havePermission(request)){ 76 | setFailedRequest(R.error403(), 200); 77 | return null; 78 | } 79 | Set headers = (Set) ctx.get("ignoredHeaders"); 80 | //We need our JWT tokens relayed to resource servers 81 | //添加自己header 82 | // ctx.addZuulRequestHeader(CommonConstants.CONTEXT_TOKEN, accessToken); 83 | //移除忽略token 84 | headers.remove("authorization"); 85 | return null; 86 | // RequestContext ctx = RequestContext.getCurrentContext(); 87 | // Set headers = (Set) ctx.get("ignoredHeaders"); 88 | // // We need our JWT tokens relayed to resource servers 89 | // headers.remove("authorization"); 90 | // return null; 91 | } 92 | 93 | private void setFailedRequest(Object body, int code) { 94 | RequestContext ctx = RequestContext.getCurrentContext(); 95 | ctx.setResponseStatusCode(code); 96 | HttpServletResponse response = ctx.getResponse(); 97 | PrintWriter out = null; 98 | try{ 99 | out = response.getWriter(); 100 | out.write(JSONUtils.beanToJson(body)); 101 | out.flush(); 102 | }catch(IOException e){ 103 | e.printStackTrace(); 104 | } 105 | ctx.setSendZuulResponse(false); 106 | } 107 | 108 | private boolean havePermission(HttpServletRequest request){ 109 | String currentURL = request.getRequestURI(); 110 | List menuDTOS = menuService.userMenus(); 111 | for(MenuDTO menuDTO:menuDTOS){ 112 | if(currentURL!=null&&null!=menuDTO.getUrl()&¤tURL.startsWith(menuDTO.getUrl())){ 113 | return true; 114 | } 115 | } 116 | return false; 117 | } 118 | 119 | private boolean isStartWith(String requestUri) { 120 | boolean flag = false; 121 | for (String s : ignorePath.split(",")) { 122 | 123 | if (requestUri.startsWith(s)) { 124 | return true; 125 | } 126 | } 127 | return flag; 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /clouddo-zuul/src/main/java/com/bootdo/clouddozuul/prc/admin/MenuService.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddozuul.prc.admin; 2 | 3 | import com.bootdo.clouddocommon.dto.MenuDTO; 4 | import com.bootdo.clouddocommon.intercepter.FeignIntercepter; 5 | import feign.Headers; 6 | import org.springframework.cloud.openfeign.FeignClient; 7 | import org.springframework.web.bind.annotation.GetMapping; 8 | 9 | import java.util.List; 10 | 11 | @Headers("Content-Type:application/json") 12 | @FeignClient(name = "api-admin", configuration = FeignIntercepter.class) 13 | public interface MenuService { 14 | @GetMapping("/menu/userMenus") 15 | List userMenus(); 16 | } 17 | -------------------------------------------------------------------------------- /clouddo-zuul/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | eureka: 2 | client: 3 | serviceUrl: 4 | defaultZone: http://localhost:8001/eureka/ 5 | server: 6 | port: 8002 7 | spring: 8 | application: 9 | name: zuul 10 | servlet: 11 | multipart: 12 | max-file-size: 100Mb 13 | max-request-size: 100Mb 14 | ribbon: 15 | ReadTimeout: 60000 16 | ConnectTimeout: 60000 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /clouddo-zuul/src/test/java/com/bootdo/clouddozuul/ClouddoZuulApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.bootdo.clouddozuul; 2 | 3 | import com.bootdo.clouddozuul.prc.admin.MenuService; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.boot.test.context.SpringBootTest; 8 | import org.springframework.test.context.junit4.SpringRunner; 9 | 10 | @RunWith(SpringRunner.class) 11 | @SpringBootTest 12 | public class ClouddoZuulApplicationTests { 13 | @Autowired 14 | MenuService menuService; 15 | 16 | @Test 17 | public void contextLoads() { 18 | menuService.userMenus(); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.bootdo 8 | clouddo 9 | pom 10 | 1.0-SNAPSHOT 11 | 12 | 1.1.0.Final 13 | 14 | 15 | clouddo-common 16 | clouddo-server 17 | clouddo-zuul 18 | clouddo-admin 19 | clouddo-cms 20 | clouddo-base 21 | 22 | 23 | 24 | public 25 | aliyun nexus 26 | http://maven.aliyun.com/nexus/content/groups/public/ 27 | 28 | true 29 | 30 | 31 | 32 | 33 | 34 | public 35 | aliyun nexus 36 | http://maven.aliyun.com/nexus/content/groups/public/ 37 | 38 | true 39 | 40 | 41 | false 42 | 43 | 44 | 45 | --------------------------------------------------------------------------------