From 356f1cfd6ea556022a1bd9c8712e45cddde0e407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Wed, 1 Nov 2017 21:26:56 +0800 Subject: [PATCH 01/15] =?UTF-8?q?[Feature]=20=E4=BF=AE=E6=94=B9auth?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/api/vo/gate/ClientInfo.java | 152 ------------------ ace-auth/ace-auth-server/src/db/init.sql | 41 +---- .../security/auth/feign/IUserService.java | 12 +- .../src/main/resources/application.yml | 2 +- .../common/context/BaseContextHandler.java | 4 +- 5 files changed, 10 insertions(+), 201 deletions(-) delete mode 100644 ace-api/src/main/java/com/github/wxiaoqi/security/api/vo/gate/ClientInfo.java diff --git a/ace-api/src/main/java/com/github/wxiaoqi/security/api/vo/gate/ClientInfo.java b/ace-api/src/main/java/com/github/wxiaoqi/security/api/vo/gate/ClientInfo.java deleted file mode 100644 index 1f292735..00000000 --- a/ace-api/src/main/java/com/github/wxiaoqi/security/api/vo/gate/ClientInfo.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.github.wxiaoqi.security.api.vo.gate; - -import java.io.Serializable; -import java.util.Date; - -/** - * ${DESCRIPTION} - * - * @author wanghaobin - * @create 2017-07-02 19:11 - */ -public class ClientInfo implements Serializable{ - private Integer id; - - private String code; - - private String secret; - - private String name; - - private boolean isLocked; - - private String description; - - private Date crtTime; - - private String crtUser; - - private String crtName; - - private String crtHost; - - private Date updTime; - - private String updUser; - - private String updName; - - private String updHost; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public String getSecret() { - return secret; - } - - public void setSecret(String secret) { - this.secret = secret; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public boolean isLocked() { - return isLocked; - } - - public void setLocked(boolean isLocked) { - this.isLocked = isLocked; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public Date getCrtTime() { - return crtTime; - } - - public void setCrtTime(Date crtTime) { - this.crtTime = crtTime; - } - - public String getCrtUser() { - return crtUser; - } - - public void setCrtUser(String crtUser) { - this.crtUser = crtUser; - } - - public String getCrtName() { - return crtName; - } - - public void setCrtName(String crtName) { - this.crtName = crtName; - } - - public String getCrtHost() { - return crtHost; - } - - public void setCrtHost(String crtHost) { - this.crtHost = crtHost; - } - - public Date getUpdTime() { - return updTime; - } - - public void setUpdTime(Date updTime) { - this.updTime = updTime; - } - - public String getUpdUser() { - return updUser; - } - - public void setUpdUser(String updUser) { - this.updUser = updUser; - } - - public String getUpdName() { - return updName; - } - - public void setUpdName(String updName) { - this.updName = updName; - } - - public String getUpdHost() { - return updHost; - } - - public void setUpdHost(String updHost) { - this.updHost = updHost; - } -} diff --git a/ace-auth/ace-auth-server/src/db/init.sql b/ace-auth/ace-auth-server/src/db/init.sql index eb97048e..64a199c7 100644 --- a/ace-auth/ace-auth-server/src/db/init.sql +++ b/ace-auth/ace-auth-server/src/db/init.sql @@ -1,43 +1,6 @@ -CREATE DATABASE ag_gate DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -Use ag_gate; - --- ---------------------------- --- Table structure for `base_element` --- ---------------------------- -DROP TABLE IF EXISTS `base_element`; -CREATE TABLE `base_element` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `code` varchar(255) DEFAULT NULL, - `type` varchar(255) DEFAULT NULL, - `name` varchar(255) DEFAULT NULL, - `uri` varchar(255) DEFAULT NULL, - `menu_id` varchar(255) DEFAULT NULL, - `parent_id` varchar(255) DEFAULT NULL, - `path` varchar(2000) DEFAULT NULL, - `method` varchar(10) DEFAULT NULL, - `description` varchar(255) DEFAULT NULL, - `crt_time` datetime DEFAULT NULL, - `crt_user` varchar(255) DEFAULT NULL, - `crt_name` varchar(255) DEFAULT NULL, - `crt_host` varchar(255) DEFAULT NULL, - `attr1` varchar(255) DEFAULT NULL, - `attr2` varchar(255) DEFAULT NULL, - `attr3` varchar(255) DEFAULT NULL, - `attr4` varchar(255) DEFAULT NULL, - `attr5` varchar(255) DEFAULT NULL, - `attr6` varchar(255) DEFAULT NULL, - `attr7` varchar(255) DEFAULT NULL, - `attr8` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4; - --- ---------------------------- --- Records of `base_element` --- ---------------------------- -BEGIN; -INSERT INTO `base_element` VALUES ('44', 'user:system', 'uri', '获取用户系统', '/api/user/un/{*}/system', '-1', null, null, 'GET', '', null, null, null, null, null, null, null, null, null, null, null, null); -COMMIT; +CREATE DATABASE ag_auth DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +Use ag_auth; -- ---------------------------- -- Table structure for `gate_client` diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java index a2cc1826..c117fc28 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java @@ -1,6 +1,5 @@ package com.github.wxiaoqi.security.auth.feign; -import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; import com.github.wxiaoqi.security.api.vo.user.UserInfo; import com.github.wxiaoqi.security.auth.configuration.FeignConfiguration; import org.springframework.cloud.netflix.feign.FeignClient; @@ -8,8 +7,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import java.util.List; - /** * ${DESCRIPTION} @@ -19,10 +16,11 @@ import java.util.List; */ @FeignClient(value = "ace-admin",configuration = FeignConfiguration.class) public interface IUserService { + /** + * 根据用户名放回用户信息 + * @param username + * @return + */ @RequestMapping(value = "/api/user/username/{username}", method = RequestMethod.GET) public UserInfo getUserByUsername(@PathVariable("username") String username); - @RequestMapping(value = "/api/user/un/{username}/permissions", method = RequestMethod.GET) - public List getPermissionByUsername(@PathVariable("username") String username); - @RequestMapping(value = "/api/permissions", method = RequestMethod.GET) - List getAllPermissionInfo(); } diff --git a/ace-auth/ace-auth-server/src/main/resources/application.yml b/ace-auth/ace-auth-server/src/main/resources/application.yml index 9dc9a28f..2f3e44a7 100644 --- a/ace-auth/ace-auth-server/src/main/resources/application.yml +++ b/ace-auth/ace-auth-server/src/main/resources/application.yml @@ -12,7 +12,7 @@ spring: max-active: 20 datasource: name: test - url: jdbc:mysql://localhost:3306/ag_gate?useUnicode=true&characterEncoding=UTF8 + url: jdbc:mysql://localhost:3306/ag_auth?useUnicode=true&characterEncoding=UTF8 username: root password: 123456 # 使用druid数据源 diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/context/BaseContextHandler.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/context/BaseContextHandler.java index 8d8c817f..59efa476 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/context/BaseContextHandler.java +++ b/ace-common/src/main/java/com/github/wxiaoqi/security/common/context/BaseContextHandler.java @@ -88,7 +88,7 @@ public class BaseContextHandler { BaseContextHandler.set("test", "moo"); try { - Thread.currentThread().sleep(3000); + Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } @@ -101,7 +101,7 @@ public class BaseContextHandler { logger.info("thread two done!"); }).start(); - Thread.currentThread().sleep(5000); + Thread.sleep(5000); assertEquals(BaseContextHandler.get("test"), "main"); logger.info("main one done!"); } -- Gitee From 98aa0ffa9baec3bfa2fba1e3f41d9c818db0763b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Fri, 3 Nov 2017 10:24:09 +0800 Subject: [PATCH 02/15] =?UTF-8?q?[Feature]=20=E5=A2=9E=E5=8A=A0auth=20?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ace-auth/ace-auth-common/pom.xml | 15 +++++++++++++++ ace-auth/pom.xml | 1 + 2 files changed, 16 insertions(+) create mode 100644 ace-auth/ace-auth-common/pom.xml diff --git a/ace-auth/ace-auth-common/pom.xml b/ace-auth/ace-auth-common/pom.xml new file mode 100644 index 00000000..7518a32d --- /dev/null +++ b/ace-auth/ace-auth-common/pom.xml @@ -0,0 +1,15 @@ + + + + ace-auth + com.github.wxiaoqi + 1.0-SNAPSHOT + + 4.0.0 + + ace-auth-common + + + \ No newline at end of file diff --git a/ace-auth/pom.xml b/ace-auth/pom.xml index b34a9593..59e7fe5c 100644 --- a/ace-auth/pom.xml +++ b/ace-auth/pom.xml @@ -15,6 +15,7 @@ ace-auth-client ace-auth-server + ace-auth-common \ No newline at end of file -- Gitee From 377566015118e5c76ee2b73820e32015f0e6650f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Sat, 4 Nov 2017 12:05:34 +0800 Subject: [PATCH 03/15] =?UTF-8?q?[Feature]=20=E5=A2=9E=E5=8A=A0=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=80=BB=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- ace-admin/src/main/resources/application.yml | 5 +++ ace-auth/ace-auth-client/pom.xml | 7 +++ .../configuration/AutoConfiguration.java | 4 +- .../ServiceAuthRestInterceptor.java | 2 +- .../interceptor/UserAuthRestInterceptor.java | 2 +- .../auth/client/jwt/ServiceAuthUtil.java | 4 +- .../auth/client/jwt/UserAuthUtil.java | 4 +- .../listener/AuthRemoteEventListener.java | 22 ++++++++++ ace-auth/ace-auth-common/pom.xml | 16 +++++++ .../common/constatns/CommonConstants.java | 22 ++++++++++ .../auth/common/event/AuthRemoteEvent.java | 34 +++++++++++++++ .../auth/common/util/StringHelper.java | 10 +++++ .../auth}/common/util/jwt/IJWTInfo.java | 2 +- .../auth}/common/util/jwt/JWTHelper.java | 7 ++- .../auth}/common/util/jwt/JWTInfo.java | 2 +- .../auth/common/util/jwt}/RsaKeyHelper.java | 2 +- ace-auth/ace-auth-server/pom.xml | 15 +++++++ .../wxiaoqi/security/auth/AuthBootstrap.java | 2 + .../security/auth/bean/ClientInfo.java | 2 +- .../auth/controller/AuthController.java | 13 +----- .../auth/controller/MyController.java | 43 +++++++++++++++++++ .../security/auth/service/AuthService.java | 3 -- .../auth/service/impl/AuthServiceImpl.java | 33 +------------- .../auth/util/client/ClientTokenUtil.java | 4 +- .../security/auth/util/user/JwtTokenUtil.java | 4 +- .../src/main/resources/application.yml | 8 +++- ace-gate/ace-gate-server/pom.xml | 1 + .../src/main/resources/application.yml | 1 + 29 files changed, 209 insertions(+), 67 deletions(-) create mode 100644 ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java create mode 100644 ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/constatns/CommonConstants.java create mode 100644 ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java create mode 100644 ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/StringHelper.java rename {ace-common/src/main/java/com/github/wxiaoqi/security => ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth}/common/util/jwt/IJWTInfo.java (83%) rename {ace-common/src/main/java/com/github/wxiaoqi/security => ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth}/common/util/jwt/JWTHelper.java (88%) rename {ace-common/src/main/java/com/github/wxiaoqi/security => ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth}/common/util/jwt/JWTInfo.java (96%) rename {ace-common/src/main/java/com/github/wxiaoqi/security/common/util => ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt}/RsaKeyHelper.java (97%) create mode 100644 ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java diff --git a/LICENSE b/LICENSE index eab32636..ee706304 100644 --- a/LICENSE +++ b/LICENSE @@ -176,7 +176,7 @@ recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2017 Mr.AG + Copyright 2017 WangHaoBin Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/ace-admin/src/main/resources/application.yml b/ace-admin/src/main/resources/application.yml index 1a66e378..64b2120c 100644 --- a/ace-admin/src/main/resources/application.yml +++ b/ace-admin/src/main/resources/application.yml @@ -30,6 +30,11 @@ spring: testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 + rabbitmq: + host: localhost + port: 5672 + username: guest + password: guest mybatis: basepackage: com.github.wxiaoqi.security.admin.mapper xmlLocation: classpath:mapper/**/*.xml diff --git a/ace-auth/ace-auth-client/pom.xml b/ace-auth/ace-auth-client/pom.xml index 8ed3fc6f..3cd53279 100644 --- a/ace-auth/ace-auth-client/pom.xml +++ b/ace-auth/ace-auth-client/pom.xml @@ -35,6 +35,13 @@ 9.5.0 provided + + com.github.wxiaoqi + ace-auth-common + 1.0-SNAPSHOT + + + diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/configuration/AutoConfiguration.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/configuration/AutoConfiguration.java index 24fa090a..b2e9f504 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/configuration/AutoConfiguration.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/configuration/AutoConfiguration.java @@ -2,6 +2,7 @@ package com.github.wxiaoqi.security.auth.client.configuration; import com.github.wxiaoqi.security.auth.client.config.ServiceAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; +import org.springframework.cloud.bus.jackson.RemoteApplicationEventScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -10,7 +11,8 @@ import org.springframework.context.annotation.Configuration; * Created by ace on 2017/9/15. */ @Configuration -@ComponentScan("com.github.wxiaoqi.security.auth.client") +@ComponentScan({"com.github.wxiaoqi.security.auth.client","com.github.wxiaoqi.security.auth.common.event"}) +@RemoteApplicationEventScan(basePackages = "com.github.wxiaoqi.security.auth.common.event") public class AutoConfiguration { @Bean ServiceAuthConfig getServiceAuthConfig(){ diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java index 0f417f7f..1af40c8f 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java @@ -3,8 +3,8 @@ package com.github.wxiaoqi.security.auth.client.interceptor; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken; import com.github.wxiaoqi.security.auth.client.config.ServiceAuthConfig; import com.github.wxiaoqi.security.auth.client.jwt.ServiceAuthUtil; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; import com.github.wxiaoqi.security.common.exception.auth.ClientForbiddenException; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/UserAuthRestInterceptor.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/UserAuthRestInterceptor.java index f55d812e..d9f06b68 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/UserAuthRestInterceptor.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/UserAuthRestInterceptor.java @@ -3,8 +3,8 @@ package com.github.wxiaoqi.security.auth.client.interceptor; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; import com.github.wxiaoqi.security.common.context.BaseContextHandler; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java index 3096584a..e61a7bed 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java @@ -6,10 +6,10 @@ import com.github.wxiaoqi.security.auth.client.exception.JwtIllegalArgumentExcep import com.github.wxiaoqi.security.auth.client.exception.JwtSignatureException; import com.github.wxiaoqi.security.auth.client.exception.JwtTokenExpiredException; import com.github.wxiaoqi.security.auth.client.feign.ServiceAuthFeign; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; +import com.github.wxiaoqi.security.auth.common.util.jwt.JWTHelper; import com.github.wxiaoqi.security.common.msg.BaseResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; -import com.github.wxiaoqi.security.common.util.jwt.JWTHelper; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.SignatureException; import lombok.extern.slf4j.Slf4j; diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/UserAuthUtil.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/UserAuthUtil.java index 2c665298..ac1ec3ba 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/UserAuthUtil.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/UserAuthUtil.java @@ -4,8 +4,8 @@ import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.exception.JwtIllegalArgumentException; import com.github.wxiaoqi.security.auth.client.exception.JwtSignatureException; import com.github.wxiaoqi.security.auth.client.exception.JwtTokenExpiredException; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; -import com.github.wxiaoqi.security.common.util.jwt.JWTHelper; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; +import com.github.wxiaoqi.security.auth.common.util.jwt.JWTHelper; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.SignatureException; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java new file mode 100644 index 00000000..d7a3cbd1 --- /dev/null +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java @@ -0,0 +1,22 @@ +package com.github.wxiaoqi.security.auth.client.listener; + +import com.github.wxiaoqi.security.auth.common.event.AuthRemoteEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +/** + * @author ace + * @create 2017/11/4. + */ +//自定义事件侦听 +@Component +@Slf4j +public class AuthRemoteEventListener implements ApplicationListener { + + //处理自定义事件 + @Override + public void onApplicationEvent(AuthRemoteEvent myCustomRemoteEvent) { + log.info("Received AuthRemoteEvent - message: " + myCustomRemoteEvent.getMessage()); + } +} diff --git a/ace-auth/ace-auth-common/pom.xml b/ace-auth/ace-auth-common/pom.xml index 7518a32d..b694a2e1 100644 --- a/ace-auth/ace-auth-common/pom.xml +++ b/ace-auth/ace-auth-common/pom.xml @@ -10,6 +10,22 @@ 4.0.0 ace-auth-common + + + io.jsonwebtoken + jjwt + 0.7.0 + + + joda-time + joda-time + 2.9.5 + + + org.springframework.cloud + spring-cloud-starter-bus-amqp + + \ No newline at end of file diff --git a/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/constatns/CommonConstants.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/constatns/CommonConstants.java new file mode 100644 index 00000000..2550a71f --- /dev/null +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/constatns/CommonConstants.java @@ -0,0 +1,22 @@ +package com.github.wxiaoqi.security.auth.common.constatns; + +/** + * Created by ace on 2017/8/29. + */ +public class CommonConstants { + public final static String RESOURCE_TYPE_MENU = "menu"; + public final static String RESOURCE_TYPE_BTN = "button"; + public static final Integer EX_TOKEN_ERROR_CODE = 40101; + // 用户token异常 + public static final Integer EX_USER_INVALID_CODE = 40102; + // 客户端token异常 + public static final Integer EX_CLIENT_INVALID_CODE = 40131; + public static final Integer EX_CLIENT_FORBIDDEN_CODE = 40331; + public static final Integer EX_OTHER_CODE = 500; + public static final String CONTEXT_KEY_USER_ID = "currentUserId"; + public static final String CONTEXT_KEY_USERNAME = "currentUserName"; + public static final String CONTEXT_KEY_USER_NAME = "currentUser"; + public static final String CONTEXT_KEY_USER_TOKEN = "currentUserToken"; + public static final String JWT_KEY_USER_ID = "userId"; + public static final String JWT_KEY_NAME = "name"; +} diff --git a/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java new file mode 100644 index 00000000..f9ee8d84 --- /dev/null +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java @@ -0,0 +1,34 @@ +package com.github.wxiaoqi.security.auth.common.event; + +import org.springframework.cloud.bus.event.RemoteApplicationEvent; + +import java.util.List; + +/** + * @author ace + * @create 2017/11/4. + */ +public class AuthRemoteEvent extends RemoteApplicationEvent { + private String message; + private List allowedClient; + + //jackson序列化反序列化必须有无参构造函数 + public AuthRemoteEvent() { + } + + public AuthRemoteEvent(Object source, String originService, String destinationService, String message) { + // source is the object that is publishing the event + // originService is the unique context ID of the publisher + + super(source, originService, destinationService); + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/StringHelper.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/StringHelper.java new file mode 100644 index 00000000..db7e9a76 --- /dev/null +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/StringHelper.java @@ -0,0 +1,10 @@ +package com.github.wxiaoqi.security.auth.common.util; + +/** + * Created by ace on 2017/9/10. + */ +public class StringHelper { + public static String getObjectValue(Object obj){ + return obj==null?"":obj.toString(); + } +} diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/IJWTInfo.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/IJWTInfo.java similarity index 83% rename from ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/IJWTInfo.java rename to ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/IJWTInfo.java index 589415a1..8ff2ab9d 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/IJWTInfo.java +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/IJWTInfo.java @@ -1,4 +1,4 @@ -package com.github.wxiaoqi.security.common.util.jwt; +package com.github.wxiaoqi.security.auth.common.util.jwt; /** * Created by ace on 2017/9/10. diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/JWTHelper.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/JWTHelper.java similarity index 88% rename from ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/JWTHelper.java rename to ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/JWTHelper.java index 74d3d9f9..e51f2380 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/JWTHelper.java +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/JWTHelper.java @@ -1,8 +1,7 @@ -package com.github.wxiaoqi.security.common.util.jwt; +package com.github.wxiaoqi.security.auth.common.util.jwt; -import com.github.wxiaoqi.security.common.constant.CommonConstants; -import com.github.wxiaoqi.security.common.util.RsaKeyHelper; -import com.github.wxiaoqi.security.common.util.StringHelper; +import com.github.wxiaoqi.security.auth.common.constatns.CommonConstants; +import com.github.wxiaoqi.security.auth.common.util.StringHelper; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.Jwts; diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/JWTInfo.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/JWTInfo.java similarity index 96% rename from ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/JWTInfo.java rename to ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/JWTInfo.java index 1833cefe..ad55f8e6 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/jwt/JWTInfo.java +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/JWTInfo.java @@ -1,4 +1,4 @@ -package com.github.wxiaoqi.security.common.util.jwt; +package com.github.wxiaoqi.security.auth.common.util.jwt; import java.io.Serializable; diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/RsaKeyHelper.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/RsaKeyHelper.java similarity index 97% rename from ace-common/src/main/java/com/github/wxiaoqi/security/common/util/RsaKeyHelper.java rename to ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/RsaKeyHelper.java index 1a0b32f6..56a4b28a 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/util/RsaKeyHelper.java +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/RsaKeyHelper.java @@ -1,4 +1,4 @@ -package com.github.wxiaoqi.security.common.util; +package com.github.wxiaoqi.security.auth.common.util.jwt; import java.io.*; import java.security.*; diff --git a/ace-auth/ace-auth-server/pom.xml b/ace-auth/ace-auth-server/pom.xml index 80b5f697..e3505450 100644 --- a/ace-auth/ace-auth-server/pom.xml +++ b/ace-auth/ace-auth-server/pom.xml @@ -89,6 +89,21 @@ ace-common 1.0-SNAPSHOT + + com.github.wxiaoqi + ace-auth-common + 1.0-SNAPSHOT + + + com.github.wxiaoqi + ace-auth-common + 1.0-SNAPSHOT + + + + org.springframework.cloud + spring-cloud-starter-bus-amqp + diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/AuthBootstrap.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/AuthBootstrap.java index aa73e8b0..210c76bc 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/AuthBootstrap.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/AuthBootstrap.java @@ -4,6 +4,7 @@ package com.github.wxiaoqi.security.auth; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.bus.jackson.RemoteApplicationEventScan; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; @@ -14,6 +15,7 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients; @EnableEurekaClient @EnableFeignClients @MapperScan("com.github.wxiaoqi.security.auth.mapper") +@RemoteApplicationEventScan(basePackages = "com.github.wxiaoqi.security.auth.common.event") public class AuthBootstrap { public static void main(String[] args) { SpringApplication.run(AuthBootstrap.class, args); diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/bean/ClientInfo.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/bean/ClientInfo.java index 80b3a38f..70a95b76 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/bean/ClientInfo.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/bean/ClientInfo.java @@ -1,7 +1,7 @@ package com.github.wxiaoqi.security.auth.bean; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; /** * Created by ace on 2017/9/10. diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java index 9d503a9a..8745b640 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java @@ -1,9 +1,9 @@ package com.github.wxiaoqi.security.auth.controller; +import com.github.pagehelper.PageHelper; +import com.github.wxiaoqi.security.auth.service.AuthService; import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationRequest; import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationResponse; -import com.github.wxiaoqi.security.auth.service.AuthService; -import com.github.wxiaoqi.security.auth.vo.FrontUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; @@ -51,13 +51,4 @@ public class AuthController { return ResponseEntity.ok(true); } - @RequestMapping(value = "user", method = RequestMethod.GET) - public ResponseEntity getUserInfo(String token) throws Exception { - FrontUser userInfo = authService.getUserInfo(token); - if(userInfo==null) { - return ResponseEntity.status(401).body(false); - } else { - return ResponseEntity.ok(userInfo); - } - } } diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java new file mode 100644 index 00000000..061d01a5 --- /dev/null +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java @@ -0,0 +1,43 @@ +package com.github.wxiaoqi.security.auth.controller; + +import com.github.wxiaoqi.security.auth.common.event.AuthRemoteEvent; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.ApplicationContext; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ace + * @create 2017/11/4. + */ + +@RefreshScope //允许动态刷新配置 +@RestController +public class MyController { + + //注入ApplicationContext,通过ApplicationContext来publish remote event + private ApplicationContext context; + + @Autowired + public MyController(ApplicationContext context) { + this.context = context; + } + + @RequestMapping(value = "/publish", method = RequestMethod.POST) + public String publish(@RequestParam(value = "destination", required = false, defaultValue = "**") String destination) { + // each service instance must have a unique context ID + final String myUniqueId = context.getId(); + + final AuthRemoteEvent event = + new AuthRemoteEvent(this, myUniqueId, destination, "hello world"); + //Since we extended RemoteApplicationEvent and we've configured the scanning of remote events using @RemoteApplicationEventScan, it will be treated as a bus event rather than just a regular ApplicationEvent published in the context. + //因为我们在启动类上设置了@RemoteApplicationEventScan注解,所以通过context发送的时间将变成一个bus event总线事件,而不是在自身context中发布的一个ApplicationEvent + context.publishEvent(event); + + return "event published"; + } + +} \ No newline at end of file diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java index 5454fa9a..b850ff93 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java @@ -1,12 +1,9 @@ package com.github.wxiaoqi.security.auth.service; -import com.github.wxiaoqi.security.auth.vo.FrontUser; - public interface AuthService { String login(String username, String password) throws Exception; String refresh(String oldToken); void validate(String token) throws Exception; - FrontUser getUserInfo(String token) throws Exception; Boolean invalid(String token); } diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java index d67421c3..c999a12b 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java @@ -1,22 +1,14 @@ package com.github.wxiaoqi.security.auth.service.impl; -import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; import com.github.wxiaoqi.security.api.vo.user.UserInfo; -import com.github.wxiaoqi.security.auth.util.user.JwtTokenUtil; +import com.github.wxiaoqi.security.auth.common.util.jwt.JWTInfo; import com.github.wxiaoqi.security.auth.feign.IUserService; import com.github.wxiaoqi.security.auth.service.AuthService; -import com.github.wxiaoqi.security.auth.vo.FrontUser; -import com.github.wxiaoqi.security.common.constant.CommonConstants; -import com.github.wxiaoqi.security.common.util.jwt.JWTInfo; -import org.springframework.beans.BeanUtils; +import com.github.wxiaoqi.security.auth.util.user.JwtTokenUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - @Service public class AuthServiceImpl implements AuthService { @@ -47,27 +39,6 @@ public class AuthServiceImpl implements AuthService { jwtTokenUtil.getInfoFromToken(token); } - @Override - public FrontUser getUserInfo(String token) throws Exception { - String username = jwtTokenUtil.getInfoFromToken(token).getUniqueName(); - if (username == null) { - return null; - } - UserInfo user = userService.getUserByUsername(username); - FrontUser frontUser = new FrontUser(); - BeanUtils.copyProperties(user, frontUser); - List permissionInfos = userService.getPermissionByUsername(username); - Stream menus = permissionInfos.parallelStream().filter((permission) -> { - return permission.getType().equals(CommonConstants.RESOURCE_TYPE_MENU); - }); - frontUser.setMenus(menus.collect(Collectors.toList())); - Stream elements = permissionInfos.parallelStream().filter((permission) -> { - return !permission.getType().equals(CommonConstants.RESOURCE_TYPE_MENU); - }); - frontUser.setElements(elements.collect(Collectors.toList())); - return frontUser; - } - @Override public Boolean invalid(String token) { // TODO: 2017/9/11 注销token diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/client/ClientTokenUtil.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/client/ClientTokenUtil.java index 6b3cd736..30e4e35a 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/client/ClientTokenUtil.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/client/ClientTokenUtil.java @@ -1,7 +1,7 @@ package com.github.wxiaoqi.security.auth.util.client; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; -import com.github.wxiaoqi.security.common.util.jwt.JWTHelper; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; +import com.github.wxiaoqi.security.auth.common.util.jwt.JWTHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/user/JwtTokenUtil.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/user/JwtTokenUtil.java index 870e1c73..64dab5a5 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/user/JwtTokenUtil.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/util/user/JwtTokenUtil.java @@ -1,7 +1,7 @@ package com.github.wxiaoqi.security.auth.util.user; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; -import com.github.wxiaoqi.security.common.util.jwt.JWTHelper; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; +import com.github.wxiaoqi.security.auth.common.util.jwt.JWTHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; diff --git a/ace-auth/ace-auth-server/src/main/resources/application.yml b/ace-auth/ace-auth-server/src/main/resources/application.yml index 2f3e44a7..3b9fce8d 100644 --- a/ace-auth/ace-auth-server/src/main/resources/application.yml +++ b/ace-auth/ace-auth-server/src/main/resources/application.yml @@ -31,13 +31,17 @@ spring: testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 - + rabbitmq: + host: localhost + port: 5672 + username: guest + password: guest mybatis: basepackage: com.github.wxiaoqi.security.auth.mapper xmlLocation: classpath:mapper/**/*.xml server: - port: 8777 #启动端口 + port: 9777 #启动端口 ribbon: eureka: diff --git a/ace-gate/ace-gate-server/pom.xml b/ace-gate/ace-gate-server/pom.xml index 857c7122..a40abe5f 100644 --- a/ace-gate/ace-gate-server/pom.xml +++ b/ace-gate/ace-gate-server/pom.xml @@ -66,6 +66,7 @@ ace-gate-ratelimit 1.0-SNAPSHOT + ace-gate diff --git a/ace-gate/ace-gate-server/src/main/resources/application.yml b/ace-gate/ace-gate-server/src/main/resources/application.yml index 6dfdb4f0..770701d1 100644 --- a/ace-gate/ace-gate-server/src/main/resources/application.yml +++ b/ace-gate/ace-gate-server/src/main/resources/application.yml @@ -82,3 +82,4 @@ auth: secret: 123456 pub-key: path: client/pub.key + -- Gitee From 52677127a758bb06ddc81b44882a512185bf22d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Mon, 6 Nov 2017 17:18:59 +0800 Subject: [PATCH 04/15] =?UTF-8?q?[Feature]=20=E4=B8=BB=E5=8A=A8=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E6=9B=B4=E6=96=B0=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/client/jwt/ServiceAuthUtil.java | 9 +++- .../listener/AuthRemoteEventListener.java | 22 ---------- .../auth/common/event/AuthRemoteEvent.java | 14 ++---- .../auth/common/util/jwt/RsaKeyHelper.java | 26 ++++++++++- .../auth/configuration/AuthConfiguration.java | 10 ++++- .../auth/controller/MyController.java | 43 ------------------- .../auth/service/impl/DBClientService.java | 26 ++++++++++- .../security/common/rest/BaseController.java | 8 +--- .../security/gate/config/UserPrincipal.java | 2 +- .../gate/filter/AdminAccessFilter.java | 2 +- 10 files changed, 73 insertions(+), 89 deletions(-) delete mode 100644 ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java delete mode 100644 ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java index e61a7bed..e2992b73 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/jwt/ServiceAuthUtil.java @@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.auth.client.exception.JwtIllegalArgumentExcep import com.github.wxiaoqi.security.auth.client.exception.JwtSignatureException; import com.github.wxiaoqi.security.auth.client.exception.JwtTokenExpiredException; import com.github.wxiaoqi.security.auth.client.feign.ServiceAuthFeign; +import com.github.wxiaoqi.security.auth.common.event.AuthRemoteEvent; import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; import com.github.wxiaoqi.security.auth.common.util.jwt.JWTHelper; import com.github.wxiaoqi.security.common.msg.BaseResponse; @@ -14,6 +15,7 @@ import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.SignatureException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; @@ -26,7 +28,7 @@ import java.util.List; @Configuration @Slf4j @EnableScheduling -public class ServiceAuthUtil { +public class ServiceAuthUtil implements ApplicationListener { @Autowired private ServiceAuthConfig serviceAuthConfig; @Autowired @@ -47,7 +49,6 @@ public class ServiceAuthUtil { } } - @Scheduled(cron = "0 0/5 * * * ?") public void refreshAllowedClient() { log.info("refresh allowedClient....."); BaseResponse resp = serviceAuthFeign.getAllowedClient(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret()); @@ -83,4 +84,8 @@ public class ServiceAuthUtil { return allowedClient; } + @Override + public void onApplicationEvent(AuthRemoteEvent authRemoteEvent) { + this.allowedClient = authRemoteEvent.getAllowedClient(); + } } \ No newline at end of file diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java deleted file mode 100644 index d7a3cbd1..00000000 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/listener/AuthRemoteEventListener.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.github.wxiaoqi.security.auth.client.listener; - -import com.github.wxiaoqi.security.auth.common.event.AuthRemoteEvent; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -/** - * @author ace - * @create 2017/11/4. - */ -//自定义事件侦听 -@Component -@Slf4j -public class AuthRemoteEventListener implements ApplicationListener { - - //处理自定义事件 - @Override - public void onApplicationEvent(AuthRemoteEvent myCustomRemoteEvent) { - log.info("Received AuthRemoteEvent - message: " + myCustomRemoteEvent.getMessage()); - } -} diff --git a/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java index f9ee8d84..7160e19b 100644 --- a/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/event/AuthRemoteEvent.java @@ -1,5 +1,6 @@ package com.github.wxiaoqi.security.auth.common.event; +import lombok.Data; import org.springframework.cloud.bus.event.RemoteApplicationEvent; import java.util.List; @@ -8,27 +9,20 @@ import java.util.List; * @author ace * @create 2017/11/4. */ +@Data public class AuthRemoteEvent extends RemoteApplicationEvent { - private String message; private List allowedClient; //jackson序列化反序列化必须有无参构造函数 public AuthRemoteEvent() { } - public AuthRemoteEvent(Object source, String originService, String destinationService, String message) { + public AuthRemoteEvent(Object source, String originService, String destinationService, List allowedClient) { // source is the object that is publishing the event // originService is the unique context ID of the publisher - super(source, originService, destinationService); - this.message = message; + this.allowedClient = allowedClient; } - public String getMessage() { - return message; - } - public void setMessage(String message) { - this.message = message; - } } diff --git a/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/RsaKeyHelper.java b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/RsaKeyHelper.java index 56a4b28a..b30b6c9d 100644 --- a/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/RsaKeyHelper.java +++ b/ace-auth/ace-auth-common/src/main/java/com/github/wxiaoqi/security/auth/common/util/jwt/RsaKeyHelper.java @@ -1,9 +1,14 @@ package com.github.wxiaoqi.security.auth.common.util.jwt; -import java.io.*; +import java.io.DataInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; +import java.util.HashMap; +import java.util.Map; /** * Created by ace on 2017/9/10. @@ -66,5 +71,24 @@ public class RsaKeyHelper { fos.close(); } + /** + * 生存rsa公钥和密钥 + * @param password + * @throws IOException + * @throws NoSuchAlgorithmException + */ + public static Map generateKey(String password) throws IOException, NoSuchAlgorithmException { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + SecureRandom secureRandom = new SecureRandom(password.getBytes()); + keyPairGenerator.initialize(1024, secureRandom); + KeyPair keyPair = keyPairGenerator.genKeyPair(); + byte[] publicKeyBytes = keyPair.getPublic().getEncoded(); + byte[] privateKeyBytes = keyPair.getPrivate().getEncoded(); + Map map = new HashMap(); + map.put("pub",publicKeyBytes); + map.put("pri",privateKeyBytes); + return map; + } + } diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/configuration/AuthConfiguration.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/configuration/AuthConfiguration.java index 894e3d8d..b6ad265a 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/configuration/AuthConfiguration.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/configuration/AuthConfiguration.java @@ -1,16 +1,22 @@ package com.github.wxiaoqi.security.auth.configuration; -import com.github.wxiaoqi.security.auth.interceptor.ClientTokenInterceptor; +import com.github.wxiaoqi.security.auth.common.util.jwt.RsaKeyHelper; import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.util.Map; /** * Created by ace on 2017/9/10. */ @Configuration public class AuthConfiguration { + + @Bean public GlobalExceptionHandler getGlobalExceptionHandler(){ return new GlobalExceptionHandler(); diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java deleted file mode 100644 index 061d01a5..00000000 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/MyController.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.github.wxiaoqi.security.auth.controller; - -import com.github.wxiaoqi.security.auth.common.event.AuthRemoteEvent; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.context.ApplicationContext; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author ace - * @create 2017/11/4. - */ - -@RefreshScope //允许动态刷新配置 -@RestController -public class MyController { - - //注入ApplicationContext,通过ApplicationContext来publish remote event - private ApplicationContext context; - - @Autowired - public MyController(ApplicationContext context) { - this.context = context; - } - - @RequestMapping(value = "/publish", method = RequestMethod.POST) - public String publish(@RequestParam(value = "destination", required = false, defaultValue = "**") String destination) { - // each service instance must have a unique context ID - final String myUniqueId = context.getId(); - - final AuthRemoteEvent event = - new AuthRemoteEvent(this, myUniqueId, destination, "hello world"); - //Since we extended RemoteApplicationEvent and we've configured the scanning of remote events using @RemoteApplicationEventScan, it will be treated as a bus event rather than just a regular ApplicationEvent published in the context. - //因为我们在启动类上设置了@RemoteApplicationEventScan注解,所以通过context发送的时间将变成一个bus event总线事件,而不是在自身context中发布的一个ApplicationEvent - context.publishEvent(event); - - return "event published"; - } - -} \ No newline at end of file diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/DBClientService.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/DBClientService.java index c9a749c1..9b2cb1b1 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/DBClientService.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/DBClientService.java @@ -1,6 +1,7 @@ package com.github.wxiaoqi.security.auth.service.impl; import com.github.wxiaoqi.security.auth.bean.ClientInfo; +import com.github.wxiaoqi.security.auth.common.event.AuthRemoteEvent; import com.github.wxiaoqi.security.auth.entity.Client; import com.github.wxiaoqi.security.auth.mapper.ClientMapper; import com.github.wxiaoqi.security.auth.service.ClientService; @@ -9,6 +10,7 @@ import com.github.wxiaoqi.security.common.exception.auth.ClientInvalidException; import com.github.wxiaoqi.security.common.util.UUIDUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.context.ApplicationContext; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -26,6 +28,13 @@ public class DBClientService implements ClientService { private ClientTokenUtil clientTokenUtil; @Autowired private DiscoveryClient discovery; + private ApplicationContext context; + + @Autowired + public DBClientService(ApplicationContext context) { + this.context = context; + } + @Override public String apply(String clientId, String secret) throws Exception { Client client = getClient(clientId, secret); @@ -52,6 +61,13 @@ public class DBClientService implements ClientService { return clients; } + private Client getClient(String clientId) { + Client client = new Client(); + client.setCode(clientId); + client = clientMapper.selectOne(client); + return client; + } + @Override @Scheduled(cron = "0 0/1 * * * ?") public void registryClient() { @@ -60,9 +76,17 @@ public class DBClientService implements ClientService { Client client = new Client(); client.setName(name); client.setCode(name); - if(clientMapper.selectCount(client)== 0) { + Client dbClient = clientMapper.selectOne(client); + if(dbClient==null) { client.setSecret(UUIDUtils.generateShortUuid()); clientMapper.insert(client); + }else{ + // 主动推送 + final List clients = clientMapper.selectAllowedClient(dbClient.getId() + ""); + final String myUniqueId = context.getId(); + final AuthRemoteEvent event = + new AuthRemoteEvent(this, myUniqueId, name, clients); + context.publishEvent(event); } }); } diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java index a2dae2a9..910c1812 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java +++ b/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java @@ -1,17 +1,14 @@ package com.github.wxiaoqi.security.common.rest; import com.github.wxiaoqi.security.common.biz.BaseBiz; +import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.TableResultResponse; import com.github.wxiaoqi.security.common.util.Query; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.security.SecurityProperties; -import org.springframework.util.Base64Utils; import org.springframework.web.bind.annotation.*; -import tk.mybatis.mapper.entity.Example; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; import java.util.List; import java.util.Map; @@ -66,7 +63,6 @@ public class BaseController { return baseBiz.selectByQuery(query); } public String getCurrentUserName(){ - String authorization = request.getHeader("Authorization"); - return new String(Base64Utils.decodeFromString(authorization)); + return BaseContextHandler.getUsername(); } } diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/UserPrincipal.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/UserPrincipal.java index c11df483..e9b160a2 100644 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/UserPrincipal.java +++ b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/UserPrincipal.java @@ -3,7 +3,7 @@ package com.github.wxiaoqi.security.gate.config; import com.github.wxiaoqi.gate.ratelimit.config.IUserPrincipal; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java index 799aec15..b8a1e9c7 100644 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java +++ b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java @@ -8,11 +8,11 @@ import com.github.wxiaoqi.security.auth.client.config.ServiceAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.jwt.ServiceAuthUtil; import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil; +import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo; import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.msg.auth.TokenErrorResponse; import com.github.wxiaoqi.security.common.msg.auth.TokenForbiddenResponse; import com.github.wxiaoqi.security.common.util.ClientUtil; -import com.github.wxiaoqi.security.common.util.jwt.IJWTInfo; import com.github.wxiaoqi.security.gate.feign.ILogService; import com.github.wxiaoqi.security.gate.feign.IUserService; import com.github.wxiaoqi.security.gate.utils.DBLog; -- Gitee From b263590c33006298ded8fa10b7f4f11c0894e9e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Thu, 16 Nov 2017 09:16:55 +0800 Subject: [PATCH 05/15] =?UTF-8?q?[Feature]=20=E9=87=8D=E6=9E=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E9=99=86=E6=A8=A1=E5=9D=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/admin/config/WebConfig.java | 12 ++-- .../wxiaoqi/security/admin/rpc/UserRest.java | 20 +++++-- .../admin/rpc/service/PermissionService.java | 13 +++++ .../interceptor/ServiceFeignInterceptor.java | 17 +++++- .../auth/controller/AuthController.java | 13 +---- .../security/auth/feign/IUserService.java | 13 +---- .../security/auth/service/AuthService.java | 4 +- .../auth/service/impl/AuthServiceImpl.java | 55 ++++++++----------- ace-gate/ace-gate-server/pom.xml | 5 ++ .../security/gate/feign/IUserService.java | 18 ++---- .../gate/filter/AdminAccessFilter.java | 43 +++++++++++---- 11 files changed, 120 insertions(+), 93 deletions(-) diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java index 9fe68744..eb728ad6 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java @@ -17,7 +17,7 @@ import java.util.Collections; @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean - GlobalExceptionHandler getGlobalExceptionHandler(){ + GlobalExceptionHandler getGlobalExceptionHandler() { return new GlobalExceptionHandler(); } @@ -25,28 +25,28 @@ public class WebConfig extends WebMvcConfigurerAdapter { public void addInterceptors(InterceptorRegistry registry) { ArrayList commonPathPatterns = getExcludeCommonPathPatterns(); registry.addInterceptor(getServiceAuthRestInterceptor()).addPathPatterns("/**").excludePathPatterns(commonPathPatterns.toArray(new String[]{})); - commonPathPatterns .add("/api/user/username/**"); + commonPathPatterns.add("/api/user/validate"); registry.addInterceptor(getUserAuthRestInterceptor()).addPathPatterns("/**").excludePathPatterns(commonPathPatterns.toArray(new String[]{})); super.addInterceptors(registry); } @Bean - ServiceAuthRestInterceptor getServiceAuthRestInterceptor(){ + ServiceAuthRestInterceptor getServiceAuthRestInterceptor() { return new ServiceAuthRestInterceptor(); } @Bean - UserAuthRestInterceptor getUserAuthRestInterceptor(){ + UserAuthRestInterceptor getUserAuthRestInterceptor() { return new UserAuthRestInterceptor(); } - private ArrayList getExcludeCommonPathPatterns(){ + private ArrayList getExcludeCommonPathPatterns() { ArrayList list = new ArrayList<>(); String[] urls = { "/v2/api-docs", "/swagger-resources/**" }; - Collections.addAll(list,urls); + Collections.addAll(list, urls); return list; } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java index 0e29d0d8..4ab8dfd9 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java @@ -20,13 +20,14 @@ public class UserRest { @Autowired private PermissionService permissionService; - @RequestMapping(value = "/user/username/{username}",method = RequestMethod.GET, produces="application/json") - public @ResponseBody UserInfo getUserByUsername(@PathVariable("username")String username) { - return permissionService.getUserByUsername(username); - } - +// @RequestMapping(value = "/user/username/{username}",method = RequestMethod.GET, produces="application/json") +// public @ResponseBody UserInfo getUserByUsername(@PathVariable("username")String username) { +// return permissionService.getUserByUsername(username); +// } +// @RequestMapping(value = "/permissions", method = RequestMethod.GET) - public @ResponseBody List getAllPermission(){ + public @ResponseBody + List getAllPermission(){ return permissionService.getAllPermission(); } @@ -35,4 +36,11 @@ public class UserRest { public @ResponseBody List getPermissionByUsername(@PathVariable("username") String username){ return permissionService.getPermissionByUsername(username); } + + @RequestMapping(value = "/user/validate", method = RequestMethod.POST) + public @ResponseBody UserInfo validate(String username,String password){ + return permissionService.validate(username,password); + } + + } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/service/PermissionService.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/service/PermissionService.java index 61c1d711..1ad58340 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/service/PermissionService.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/service/PermissionService.java @@ -17,6 +17,7 @@ import com.github.wxiaoqi.security.common.util.TreeUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -37,6 +38,8 @@ public class PermissionService { private ElementBiz elementBiz; @Autowired private UserAuthUtil userAuthUtil; + private BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(12); + public UserInfo getUserByUsername(String username) { UserInfo info = new UserInfo(); @@ -46,6 +49,16 @@ public class PermissionService { return info; } + public UserInfo validate(String username,String password){ + UserInfo info = new UserInfo(); + User user = userBiz.getUserByUsername(username); + if (encoder.matches(password, user.getPassword())) { + BeanUtils.copyProperties(user, info); + info.setId(user.getId().toString()); + } + return info; + } + public List getAllPermission() { List menus = menuBiz.selectListAll(); List result = new ArrayList(); diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java index ff395749..df4e71fa 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java @@ -11,7 +11,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; /** - * Created by ace on 2017/9/15. + * + * @author ace + * @date 2017/9/15 */ public class ServiceFeignInterceptor implements RequestInterceptor { private Logger logger = LoggerFactory.getLogger(ServiceFeignInterceptor.class); @@ -23,9 +25,22 @@ public class ServiceFeignInterceptor implements RequestInterceptor { private ServiceAuthUtil serviceAuthUtil; + @Override public void apply(RequestTemplate requestTemplate) { requestTemplate.header(serviceAuthConfig.getTokenHeader(), serviceAuthUtil.getClientToken()); requestTemplate.header(userAuthConfig.getTokenHeader(), BaseContextHandler.getToken()); } + + public void setServiceAuthConfig(ServiceAuthConfig serviceAuthConfig) { + this.serviceAuthConfig = serviceAuthConfig; + } + + public void setUserAuthConfig(UserAuthConfig userAuthConfig) { + this.userAuthConfig = userAuthConfig; + } + + public void setServiceAuthUtil(ServiceAuthUtil serviceAuthUtil) { + this.serviceAuthUtil = serviceAuthUtil; + } } \ No newline at end of file diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java index 9d503a9a..377a492c 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/controller/AuthController.java @@ -1,9 +1,8 @@ package com.github.wxiaoqi.security.auth.controller; +import com.github.wxiaoqi.security.auth.service.AuthService; import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationRequest; import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationResponse; -import com.github.wxiaoqi.security.auth.service.AuthService; -import com.github.wxiaoqi.security.auth.vo.FrontUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; @@ -50,14 +49,4 @@ public class AuthController { authService.invalid(token); return ResponseEntity.ok(true); } - - @RequestMapping(value = "user", method = RequestMethod.GET) - public ResponseEntity getUserInfo(String token) throws Exception { - FrontUser userInfo = authService.getUserInfo(token); - if(userInfo==null) { - return ResponseEntity.status(401).body(false); - } else { - return ResponseEntity.ok(userInfo); - } - } } diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java index a2cc1826..cb6f62ed 100644 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/feign/IUserService.java @@ -1,14 +1,11 @@ package com.github.wxiaoqi.security.auth.feign; -import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; import com.github.wxiaoqi.security.api.vo.user.UserInfo; import com.github.wxiaoqi.security.auth.configuration.FeignConfiguration; import org.springframework.cloud.netflix.feign.FeignClient; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; - -import java.util.List; +import org.springframework.web.bind.annotation.RequestParam; /** @@ -19,10 +16,6 @@ import java.util.List; */ @FeignClient(value = "ace-admin",configuration = FeignConfiguration.class) public interface IUserService { - @RequestMapping(value = "/api/user/username/{username}", method = RequestMethod.GET) - public UserInfo getUserByUsername(@PathVariable("username") String username); - @RequestMapping(value = "/api/user/un/{username}/permissions", method = RequestMethod.GET) - public List getPermissionByUsername(@PathVariable("username") String username); - @RequestMapping(value = "/api/permissions", method = RequestMethod.GET) - List getAllPermissionInfo(); + @RequestMapping(value = "/api/user/validate", method = RequestMethod.POST) + public UserInfo validate(@RequestParam("username") String username, @RequestParam("password") String password); } diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java index 5454fa9a..d7ebfacf 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java @@ -1,12 +1,10 @@ package com.github.wxiaoqi.security.auth.service; -import com.github.wxiaoqi.security.auth.vo.FrontUser; - public interface AuthService { String login(String username, String password) throws Exception; String refresh(String oldToken); void validate(String token) throws Exception; - FrontUser getUserInfo(String token) throws Exception; +// FrontUser getUserInfo(String token) throws Exception; Boolean invalid(String token); } diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java index d67421c3..41eb846c 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java @@ -1,21 +1,14 @@ package com.github.wxiaoqi.security.auth.service.impl; -import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; import com.github.wxiaoqi.security.api.vo.user.UserInfo; -import com.github.wxiaoqi.security.auth.util.user.JwtTokenUtil; import com.github.wxiaoqi.security.auth.feign.IUserService; import com.github.wxiaoqi.security.auth.service.AuthService; -import com.github.wxiaoqi.security.auth.vo.FrontUser; -import com.github.wxiaoqi.security.common.constant.CommonConstants; +import com.github.wxiaoqi.security.auth.util.user.JwtTokenUtil; import com.github.wxiaoqi.security.common.util.jwt.JWTInfo; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import org.springframework.util.StringUtils; @Service public class AuthServiceImpl implements AuthService { @@ -34,9 +27,9 @@ public class AuthServiceImpl implements AuthService { @Override public String login(String username, String password) throws Exception { - UserInfo info = userService.getUserByUsername(username); + UserInfo info = userService.validate(username,password); String token = ""; - if (encoder.matches(password, info.getPassword())) { + if (!StringUtils.isEmpty(info.getId())) { token = jwtTokenUtil.generateToken(new JWTInfo(info.getUsername(), info.getId() + "", info.getName())); } return token; @@ -47,26 +40,26 @@ public class AuthServiceImpl implements AuthService { jwtTokenUtil.getInfoFromToken(token); } - @Override - public FrontUser getUserInfo(String token) throws Exception { - String username = jwtTokenUtil.getInfoFromToken(token).getUniqueName(); - if (username == null) { - return null; - } - UserInfo user = userService.getUserByUsername(username); - FrontUser frontUser = new FrontUser(); - BeanUtils.copyProperties(user, frontUser); - List permissionInfos = userService.getPermissionByUsername(username); - Stream menus = permissionInfos.parallelStream().filter((permission) -> { - return permission.getType().equals(CommonConstants.RESOURCE_TYPE_MENU); - }); - frontUser.setMenus(menus.collect(Collectors.toList())); - Stream elements = permissionInfos.parallelStream().filter((permission) -> { - return !permission.getType().equals(CommonConstants.RESOURCE_TYPE_MENU); - }); - frontUser.setElements(elements.collect(Collectors.toList())); - return frontUser; - } +// @Override +// public FrontUser getUserInfo(String token) throws Exception { +// String username = jwtTokenUtil.getInfoFromToken(token).getUniqueName(); +// if (username == null) { +// return null; +// } +// UserInfo user = userService.getUserByUsername(username); +// FrontUser frontUser = new FrontUser(); +// BeanUtils.copyProperties(user, frontUser); +// List permissionInfos = userService.getPermissionByUsername(username); +// Stream menus = permissionInfos.parallelStream().filter((permission) -> { +// return permission.getType().equals(CommonConstants.RESOURCE_TYPE_MENU); +// }); +// frontUser.setMenus(menus.collect(Collectors.toList())); +// Stream elements = permissionInfos.parallelStream().filter((permission) -> { +// return !permission.getType().equals(CommonConstants.RESOURCE_TYPE_MENU); +// }); +// frontUser.setElements(elements.collect(Collectors.toList())); +// return frontUser; +// } @Override public Boolean invalid(String token) { diff --git a/ace-gate/ace-gate-server/pom.xml b/ace-gate/ace-gate-server/pom.xml index a8cf3b86..67e87483 100644 --- a/ace-gate/ace-gate-server/pom.xml +++ b/ace-gate/ace-gate-server/pom.xml @@ -66,6 +66,11 @@ ace-gate-ratelimit 1.0-SNAPSHOT + + com.netflix.feign + feign-jackson + 8.18.0 + ace-gate diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/feign/IUserService.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/feign/IUserService.java index 4d45ccc1..ead97e52 100644 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/feign/IUserService.java +++ b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/feign/IUserService.java @@ -1,12 +1,8 @@ package com.github.wxiaoqi.security.gate.feign; import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; -import com.github.wxiaoqi.security.api.vo.user.UserInfo; -import com.github.wxiaoqi.security.gate.config.ZuulConfig; -import org.springframework.cloud.netflix.feign.FeignClient; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import feign.Param; +import feign.RequestLine; import java.util.List; @@ -17,13 +13,9 @@ import java.util.List; * @author wanghaobin * @create 2017-06-21 8:11 */ -@FeignClient(value = "ace-admin",configuration = {ZuulConfig.class}) -@RequestMapping("api") public interface IUserService { - @RequestMapping(value = "/user/username/{username}", method = RequestMethod.GET) - public UserInfo getUserByUsername(@PathVariable("username") String username); - @RequestMapping(value = "/user/un/{username}/permissions", method = RequestMethod.GET) - public List getPermissionByUsername(@PathVariable("username") String username); - @RequestMapping(value = "/permissions", method = RequestMethod.GET) + @RequestLine(value = "GET /api/user/un/{username}/permissions") + public List getPermissionByUsername(@Param("username") String username); + @RequestLine(value = "GET /api/permissions") List getAllPermissionInfo(); } diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java index 799aec15..749c5d8e 100644 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java +++ b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java @@ -3,9 +3,9 @@ package com.github.wxiaoqi.security.gate.filter; import com.alibaba.fastjson.JSON; import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; import com.github.wxiaoqi.security.api.vo.log.LogInfo; -import com.github.wxiaoqi.security.api.vo.user.UserInfo; import com.github.wxiaoqi.security.auth.client.config.ServiceAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; +import com.github.wxiaoqi.security.auth.client.interceptor.ServiceFeignInterceptor; import com.github.wxiaoqi.security.auth.client.jwt.ServiceAuthUtil; import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil; import com.github.wxiaoqi.security.common.context.BaseContextHandler; @@ -18,14 +18,20 @@ import com.github.wxiaoqi.security.gate.feign.IUserService; import com.github.wxiaoqi.security.gate.utils.DBLog; import com.google.common.base.Predicate; import com.google.common.collect.Collections2; +import com.netflix.appinfo.InstanceInfo; +import com.netflix.discovery.EurekaClient; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; +import feign.Feign; +import feign.jackson.JacksonDecoder; +import feign.jackson.JacksonEncoder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import java.net.URLEncoder; import java.util.Collection; @@ -43,7 +49,7 @@ import java.util.regex.Pattern; @Slf4j public class AdminAccessFilter extends ZuulFilter { - @Autowired +// @Autowired private IUserService userService; @Autowired private ILogService logService; @@ -65,6 +71,22 @@ public class AdminAccessFilter extends ZuulFilter { @Autowired private ServiceAuthUtil serviceAuthUtil; + @Autowired + private EurekaClient discoveryClient; + + @PostConstruct + public void init() { + InstanceInfo prodSvcInfo = discoveryClient.getNextServerFromEureka("ACE-ADMIN", false); + ServiceFeignInterceptor serviceFeignInterceptor = new ServiceFeignInterceptor(); + serviceFeignInterceptor.setServiceAuthConfig(serviceAuthConfig); + serviceFeignInterceptor.setServiceAuthUtil(serviceAuthUtil); + serviceFeignInterceptor.setUserAuthConfig(userAuthConfig); + this.userService = Feign.builder().encoder(new JacksonEncoder()) + .decoder(new JacksonDecoder()) + .requestInterceptor(serviceFeignInterceptor) + .target(IUserService.class, prodSvcInfo.getHomePageUrl()); + } + @Override public String filterType() { return "pre"; @@ -102,7 +124,7 @@ public class AdminAccessFilter extends ZuulFilter { // 判断资源是否启用权限约束 Collection result = getPermissionInfos(requestUri, method, permissionInfos); if(result.size()>0){ - checkAllow(requestUri, method, ctx, user.getUniqueName()); + checkUserPermission(requestUri, method, ctx, user); } // 申请客户端密钥头 ctx.addZuulRequestHeader(serviceAuthConfig.getTokenHeader(),serviceAuthUtil.getClientToken()); @@ -130,13 +152,12 @@ public class AdminAccessFilter extends ZuulFilter { }); } - private void setCurrentUserInfoAndLog(RequestContext ctx, String username, PermissionInfo pm) { - UserInfo info = userService.getUserByUsername(username); + private void setCurrentUserInfoAndLog(RequestContext ctx, IJWTInfo user, PermissionInfo pm) { String host = ClientUtil.getClientIp(ctx.getRequest()); - ctx.addZuulRequestHeader("userId", info.getId()); - ctx.addZuulRequestHeader("userName", URLEncoder.encode(info.getName())); + ctx.addZuulRequestHeader("userId", user.getId()); + ctx.addZuulRequestHeader("userName", URLEncoder.encode(user.getName())); ctx.addZuulRequestHeader("userHost", ClientUtil.getClientIp(ctx.getRequest())); - LogInfo logInfo = new LogInfo(pm.getMenu(),pm.getName(),pm.getUri(),new Date(),info.getId(),info.getName(),host); + LogInfo logInfo = new LogInfo(pm.getMenu(),pm.getName(),pm.getUri(),new Date(),user.getId(),user.getName(),host); DBLog.getInstance().setLogService(logService).offerQueue(logInfo); } @@ -178,9 +199,9 @@ public class AdminAccessFilter extends ZuulFilter { * @param requestUri * @param method */ - private void checkAllow(final String requestUri, final String method ,RequestContext ctx,String username) { + private void checkUserPermission(final String requestUri, final String method ,RequestContext ctx,IJWTInfo user) { log.debug("uri:" + requestUri + "----method:" + method); - List permissionInfos = getPermissionInfos(ctx.getRequest(), username) ; + List permissionInfos = getPermissionInfos(ctx.getRequest(), user.getUniqueName()) ; Collection result = getPermissionInfos(requestUri, method, permissionInfos); if (result.size() <= 0) { setFailedRequest(JSON.toJSONString(new TokenForbiddenResponse("Token Forbidden!")), 200); @@ -188,7 +209,7 @@ public class AdminAccessFilter extends ZuulFilter { PermissionInfo[] pms = result.toArray(new PermissionInfo[]{}); PermissionInfo pm = pms[0]; if(!"GET".equals(method)){ - setCurrentUserInfoAndLog(ctx, username, pm); + setCurrentUserInfoAndLog(ctx, user, pm); } } } -- Gitee From 9d11a63e17aa91fc27bee5ad375285b6ef0d225f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Thu, 16 Nov 2017 09:17:25 +0800 Subject: [PATCH 06/15] =?UTF-8?q?[Feature]=20=E5=A2=9E=E5=8A=A0=E7=A9=BA?= =?UTF-8?q?=E6=9E=84=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/client/interceptor/ServiceFeignInterceptor.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java index df4e71fa..12b0a2dd 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceFeignInterceptor.java @@ -24,6 +24,8 @@ public class ServiceFeignInterceptor implements RequestInterceptor { @Autowired private ServiceAuthUtil serviceAuthUtil; + public ServiceFeignInterceptor() { + } @Override -- Gitee From b7a79e7c22872fd622d4f6e6ed2fce0f7bf9f02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Thu, 16 Nov 2017 21:37:20 +0800 Subject: [PATCH 07/15] =?UTF-8?q?[Feature]=20=E9=9B=86=E6=88=90ace-cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ace-admin/pom.xml | 15 +++ .../security/admin/AdminBootstrap.java | 4 + .../security/admin/biz/ElementBiz.java | 21 ++++ .../wxiaoqi/security/admin/biz/GroupBiz.java | 95 +++++++++++-------- .../wxiaoqi/security/admin/biz/MenuBiz.java | 46 ++++++--- .../wxiaoqi/security/admin/biz/UserBiz.java | 7 +- .../security/admin/config/WebConfig.java | 14 ++- .../admin/rest/ElementController.java | 7 +- .../wxiaoqi/security/admin/rpc/UserRest.java | 6 -- ace-admin/src/main/resources/application.yml | 17 +++- .../security/common/msg/ListRestResponse.java | 21 ---- .../security/common/rest/BaseController.java | 14 +-- .../wxiaoqi/security/gate/vo/FrontUser.java | 74 --------------- 13 files changed, 170 insertions(+), 171 deletions(-) delete mode 100644 ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/vo/FrontUser.java diff --git a/ace-admin/pom.xml b/ace-admin/pom.xml index 9e9f1d1f..a6198164 100644 --- a/ace-admin/pom.xml +++ b/ace-admin/pom.xml @@ -157,6 +157,21 @@ ace-auth-client 1.0-SNAPSHOT + + com.github.wxiaoqi + ace-cache + 0.0.2-SNAPSHOT + + + org.webjars + jquery + 2.1.4 + + + org.webjars + bootstrap + 3.1.0 + ace-admin diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java index 70297eb5..4b927c7c 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java @@ -7,6 +7,8 @@ import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableScheduling; /** @@ -22,6 +24,8 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling @EnableAceAuthClient @ServletComponentScan("com.github.wxiaoqi.security.admin.config.druid") +@ComponentScan({"com.ace.cache","com.github.wxiaoqi.security.admin"}) +@EnableAspectJAutoProxy public class AdminBootstrap { public static void main(String[] args) { new SpringApplicationBuilder(AdminBootstrap.class).web(true).run(args); } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java index 9e98aa53..c44e4a97 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java @@ -1,5 +1,7 @@ package com.github.wxiaoqi.security.admin.biz; +import com.ace.cache.annotation.Cache; +import com.ace.cache.annotation.CacheClear; import com.github.wxiaoqi.security.admin.entity.Element; import com.github.wxiaoqi.security.admin.mapper.ElementMapper; import com.github.wxiaoqi.security.common.biz.BaseBiz; @@ -15,10 +17,29 @@ import java.util.List; */ @Service public class ElementBiz extends BaseBiz { + @Cache(key="permission:ele:u{1}") public List getAuthorityElementByUserId(String userId){ return mapper.selectAuthorityElementByUserId(userId); } public List getAuthorityElementByUserId(String userId,String menuId){ return mapper.selectAuthorityMenuElementByUserId(userId,menuId); } + + @Override + @Cache(key="permission:ele") + public List selectListAll() { + return super.selectListAll(); + } + + @Override + @CacheClear(pre="permission:ele") + public void insertSelective(Element entity) { + super.insertSelective(entity); + } + + @Override + @CacheClear(pre="permission:ele") + public void updateSelectiveById(Element entity) { + super.updateSelectiveById(entity); + } } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java index 162077b8..eb60a639 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java @@ -1,19 +1,20 @@ package com.github.wxiaoqi.security.admin.biz; +import com.ace.cache.annotation.CacheClear; import com.github.wxiaoqi.security.admin.constant.AdminCommonConstant; -import com.github.wxiaoqi.security.admin.entity.*; import com.github.wxiaoqi.security.admin.entity.Group; +import com.github.wxiaoqi.security.admin.entity.Menu; +import com.github.wxiaoqi.security.admin.entity.ResourceAuthority; import com.github.wxiaoqi.security.admin.mapper.GroupMapper; import com.github.wxiaoqi.security.admin.mapper.MenuMapper; import com.github.wxiaoqi.security.admin.mapper.ResourceAuthorityMapper; import com.github.wxiaoqi.security.admin.mapper.UserMapper; import com.github.wxiaoqi.security.admin.vo.AuthorityMenuTree; import com.github.wxiaoqi.security.admin.vo.GroupUsers; +import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.util.StringUtils; import java.util.*; @@ -25,110 +26,118 @@ import java.util.*; * @create 2017-06-12 8:48 */ @Service -public class GroupBiz extends BaseBiz{ +public class GroupBiz extends BaseBiz { @Autowired private UserMapper userMapper; @Autowired private ResourceAuthorityMapper resourceAuthorityMapper; @Autowired private MenuMapper menuMapper; + @Override public void insertSelective(Group entity) { - if(AdminCommonConstant.ROOT == entity.getParentId()){ - entity.setPath("/"+entity.getCode()); - }else{ + if (AdminCommonConstant.ROOT == entity.getParentId()) { + entity.setPath("/" + entity.getCode()); + } else { Group parent = this.selectById(entity.getParentId()); - entity.setPath(parent.getPath()+"/"+entity.getCode()); + entity.setPath(parent.getPath() + "/" + entity.getCode()); } super.insertSelective(entity); } @Override public void updateById(Group entity) { - if(AdminCommonConstant.ROOT == entity.getParentId()){ - entity.setPath("/"+entity.getCode()); - }else{ + if (AdminCommonConstant.ROOT == entity.getParentId()) { + entity.setPath("/" + entity.getCode()); + } else { Group parent = this.selectById(entity.getParentId()); - entity.setPath(parent.getPath()+"/"+entity.getCode()); + entity.setPath(parent.getPath() + "/" + entity.getCode()); } super.updateById(entity); } /** * 获取群组关联用户 + * * @param groupId * @return */ public GroupUsers getGroupUsers(int groupId) { - return new GroupUsers(userMapper.selectMemberByGroupId(groupId),userMapper.selectLeaderByGroupId(groupId)); + return new GroupUsers(userMapper.selectMemberByGroupId(groupId), userMapper.selectLeaderByGroupId(groupId)); } /** * 变更群主所分配用户 + * * @param groupId * @param members * @param leaders */ - public void modifyGroupUsers(int groupId, String members, String leaders){ + @CacheClear(pre = "permission") + public void modifyGroupUsers(int groupId, String members, String leaders) { mapper.deleteGroupLeadersById(groupId); mapper.deleteGroupMembersById(groupId); - if(!StringUtils.isEmpty(members)){ + if (!StringUtils.isEmpty(members)) { String[] mem = members.split(","); - for(String m:mem){ - mapper.insertGroupMembersById(groupId,Integer.parseInt(m)); + for (String m : mem) { + mapper.insertGroupMembersById(groupId, Integer.parseInt(m)); } } - if(!StringUtils.isEmpty(leaders)){ + if (!StringUtils.isEmpty(leaders)) { String[] mem = leaders.split(","); - for(String m:mem){ - mapper.insertGroupLeadersById(groupId,Integer.parseInt(m)); + for (String m : mem) { + mapper.insertGroupLeadersById(groupId, Integer.parseInt(m)); } } } /** * 变更群组关联的菜单 + * * @param groupId * @param menus */ - public void modifyAuthorityMenu(int groupId, String[] menus){ - resourceAuthorityMapper.deleteByAuthorityIdAndResourceType(groupId+"", AdminCommonConstant.RESOURCE_TYPE_MENU); + @CacheClear(pre = "permission:menu") + public void modifyAuthorityMenu(int groupId, String[] menus) { + resourceAuthorityMapper.deleteByAuthorityIdAndResourceType(groupId + "", AdminCommonConstant.RESOURCE_TYPE_MENU); List menuList = menuMapper.selectAll(); - Map map = new HashMap(); - for(Menu menu:menuList){ - map.put(menu.getId().toString(),menu.getParentId().toString()); + Map map = new HashMap(); + for (Menu menu : menuList) { + map.put(menu.getId().toString(), menu.getParentId().toString()); } Set relationMenus = new HashSet(); relationMenus.addAll(Arrays.asList(menus)); ResourceAuthority authority = null; - for(String menuId:menus){ - findParentID(map,relationMenus,menuId); + for (String menuId : menus) { + findParentID(map, relationMenus, menuId); } - for(String menuId:relationMenus){ + for (String menuId : relationMenus) { authority = new ResourceAuthority(AdminCommonConstant.AUTHORITY_TYPE_GROUP, AdminCommonConstant.RESOURCE_TYPE_MENU); - authority.setAuthorityId(groupId+""); + authority.setAuthorityId(groupId + ""); authority.setResourceId(menuId); authority.setParentId("-1"); resourceAuthorityMapper.insertSelective(authority); } } - private void findParentID(Map map,Set relationMenus,String id){ + private void findParentID(Map map, Set relationMenus, String id) { String parentId = map.get(id); - if(String.valueOf(AdminCommonConstant.ROOT).equals(id)){ - return ; + if (String.valueOf(AdminCommonConstant.ROOT).equals(id)) { + return; } relationMenus.add(parentId); - findParentID(map,relationMenus,parentId); + findParentID(map, relationMenus, parentId); } /** * 分配资源权限 + * * @param groupId * @param menuId * @param elementId */ - public void modifyAuthorityElement(int groupId,int menuId,int elementId){ + @CacheClear(pre = "permission:ele") + public void modifyAuthorityElement(int groupId, int menuId, int elementId) { ResourceAuthority authority = new ResourceAuthority(AdminCommonConstant.AUTHORITY_TYPE_GROUP, AdminCommonConstant.RESOURCE_TYPE_BTN); authority.setAuthorityId(groupId + ""); authority.setResourceId(elementId + ""); @@ -138,13 +147,15 @@ public class GroupBiz extends BaseBiz{ /** * 移除资源权限 + * * @param groupId * @param menuId * @param elementId */ + @CacheClear(pre = "permission:ele") public void removeAuthorityElement(int groupId, int menuId, int elementId) { ResourceAuthority authority = new ResourceAuthority(); - authority.setAuthorityId(groupId+""); + authority.setAuthorityId(groupId + ""); authority.setResourceId(elementId + ""); authority.setParentId("-1"); resourceAuthorityMapper.delete(authority); @@ -153,10 +164,11 @@ public class GroupBiz extends BaseBiz{ /** * 获取群主关联的菜单 + * * @param groupId * @return */ - public List getAuthorityMenu(int groupId){ + public List getAuthorityMenu(int groupId) { List menus = menuMapper.selectMenuByAuthorityId(String.valueOf(groupId), AdminCommonConstant.AUTHORITY_TYPE_GROUP); List trees = new ArrayList(); AuthorityMenuTree node = null; @@ -169,13 +181,18 @@ public class GroupBiz extends BaseBiz{ return trees; } - + /** + * 获取群组关联的资源 + * + * @param groupId + * @return + */ public List getAuthorityElement(int groupId) { ResourceAuthority authority = new ResourceAuthority(AdminCommonConstant.AUTHORITY_TYPE_GROUP, AdminCommonConstant.RESOURCE_TYPE_BTN); - authority.setAuthorityId(groupId+""); + authority.setAuthorityId(groupId + ""); List authorities = resourceAuthorityMapper.select(authority); List ids = new ArrayList(); - for(ResourceAuthority auth:authorities){ + for (ResourceAuthority auth : authorities) { ids.add(Integer.parseInt(auth.getResourceId())); } return ids; diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java index ddb16112..6da6f46d 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java @@ -1,10 +1,12 @@ package com.github.wxiaoqi.security.admin.biz; +import com.ace.cache.annotation.Cache; +import com.ace.cache.annotation.CacheClear; +import com.github.wxiaoqi.security.admin.constant.AdminCommonConstant; import com.github.wxiaoqi.security.admin.entity.Menu; +import com.github.wxiaoqi.security.admin.mapper.MenuMapper; import com.github.wxiaoqi.security.common.biz.BaseBiz; -import com.github.wxiaoqi.security.admin.constant.AdminCommonConstant; import org.springframework.stereotype.Service; -import com.github.wxiaoqi.security.admin.mapper.MenuMapper; import java.util.List; @@ -15,43 +17,61 @@ import java.util.List; * @create 2017-06-12 8:48 */ @Service -public class MenuBiz extends BaseBiz { +public class MenuBiz extends BaseBiz { @Override + @Cache(key="permission:menu") + public List selectListAll() { + return super.selectListAll(); + } + + @Override + @CacheClear(pre="permission:menu") public void insertSelective(Menu entity) { - if(AdminCommonConstant.ROOT == entity.getParentId()){ - entity.setPath("/"+entity.getCode()); - }else{ + if (AdminCommonConstant.ROOT == entity.getParentId()) { + entity.setPath("/" + entity.getCode()); + } else { Menu parent = this.selectById(entity.getParentId()); - entity.setPath(parent.getPath()+"/"+entity.getCode()); + entity.setPath(parent.getPath() + "/" + entity.getCode()); } super.insertSelective(entity); } @Override + @CacheClear(pre="permission:menu") public void updateById(Menu entity) { - if(AdminCommonConstant.ROOT == entity.getParentId()){ - entity.setPath("/"+entity.getCode()); - }else{ + if (AdminCommonConstant.ROOT == entity.getParentId()) { + entity.setPath("/" + entity.getCode()); + } else { Menu parent = this.selectById(entity.getParentId()); - entity.setPath(parent.getPath()+"/"+entity.getCode()); + entity.setPath(parent.getPath() + "/" + entity.getCode()); } super.updateById(entity); } + + @Override + @CacheClear(pre="permission:menu") + public void updateSelectiveById(Menu entity) { + super.updateSelectiveById(entity); + } + /** * 获取用户可以访问的菜单 + * * @param id * @return */ - public List getUserAuthorityMenuByUserId(int id){ + @Cache(key = "permission:menu:u{1}") + public List getUserAuthorityMenuByUserId(int id) { return mapper.selectAuthorityMenuByUserId(id); } /** * 根据用户获取可以访问的系统 + * * @param id * @return */ - public List getUserAuthoritySystemByUserId(int id){ + public List getUserAuthoritySystemByUserId(int id) { return mapper.selectAuthoritySystemByUserId(id); } } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java index 65b4cdad..ea2c7cea 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java @@ -1,5 +1,7 @@ package com.github.wxiaoqi.security.admin.biz; +import com.ace.cache.annotation.Cache; +import com.ace.cache.annotation.CacheClear; import com.github.wxiaoqi.security.admin.entity.User; import com.github.wxiaoqi.security.admin.mapper.MenuMapper; import com.github.wxiaoqi.security.admin.mapper.UserMapper; @@ -31,10 +33,8 @@ public class UserBiz extends BaseBiz { } @Override + @CacheClear(pre="user{1.username}") public void updateSelectiveById(User entity) { - -// String password = new BCryptPasswordEncoder(UserConstant.PW_ENCORDER_SALT).encode(entity.getPassword()); -// entity.setPassword(password); super.updateSelectiveById(entity); } @@ -43,6 +43,7 @@ public class UserBiz extends BaseBiz { * @param username * @return */ + @Cache(key="user{1}") public User getUserByUsername(String username){ User user = new User(); user.setUsername(username); diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java index eb728ad6..1f6b1f29 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java @@ -5,7 +5,9 @@ import com.github.wxiaoqi.security.auth.client.interceptor.UserAuthRestIntercept import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.ArrayList; @@ -14,7 +16,8 @@ import java.util.Collections; /** * Created by ace on 2017/9/8. */ -@Configuration +@Configuration("admimWebConfig") +@Primary public class WebConfig extends WebMvcConfigurerAdapter { @Bean GlobalExceptionHandler getGlobalExceptionHandler() { @@ -44,10 +47,17 @@ public class WebConfig extends WebMvcConfigurerAdapter { ArrayList list = new ArrayList<>(); String[] urls = { "/v2/api-docs", - "/swagger-resources/**" + "/swagger-resources/**", + "/cache/**" }; Collections.addAll(list, urls); return list; + } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/static/cache/**").addResourceLocations( + "classpath:/META-INF/static/"); + super.addResourceHandlers(registry); } } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/ElementController.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/ElementController.java index b2e7fa76..1dfb742d 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/ElementController.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/ElementController.java @@ -1,11 +1,8 @@ package com.github.wxiaoqi.security.admin.rest; -import com.github.pagehelper.PageHelper; import com.github.wxiaoqi.security.admin.biz.ElementBiz; import com.github.wxiaoqi.security.admin.biz.UserBiz; import com.github.wxiaoqi.security.admin.entity.Element; -import com.github.wxiaoqi.security.admin.entity.User; -import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.TableResultResponse; import com.github.wxiaoqi.security.common.rest.BaseController; @@ -51,7 +48,7 @@ public class ElementController extends BaseController { public ObjectRestResponse getAuthorityElement(String menuId) { int userId = userBiz.getUserByUsername(getCurrentUserName()).getId(); List elements = baseBiz.getAuthorityElementByUserId(userId + "",menuId); - return new ObjectRestResponse>().rel(true).data(elements); + return new ObjectRestResponse>().data(elements); } @RequestMapping(value = "/user/menu", method = RequestMethod.GET) @@ -59,6 +56,6 @@ public class ElementController extends BaseController { public ObjectRestResponse getAuthorityElement() { int userId = userBiz.getUserByUsername(getCurrentUserName()).getId(); List elements = baseBiz.getAuthorityElementByUserId(userId + ""); - return new ObjectRestResponse>().rel(true).data(elements); + return new ObjectRestResponse>().data(elements); } } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java index 4ab8dfd9..78f0ad20 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java @@ -20,18 +20,12 @@ public class UserRest { @Autowired private PermissionService permissionService; -// @RequestMapping(value = "/user/username/{username}",method = RequestMethod.GET, produces="application/json") -// public @ResponseBody UserInfo getUserByUsername(@PathVariable("username")String username) { -// return permissionService.getUserByUsername(username); -// } -// @RequestMapping(value = "/permissions", method = RequestMethod.GET) public @ResponseBody List getAllPermission(){ return permissionService.getAllPermission(); } - @RequestMapping(value = "/user/un/{username}/permissions", method = RequestMethod.GET) public @ResponseBody List getPermissionByUsername(@PathVariable("username") String username){ return permissionService.getPermissionByUsername(username); diff --git a/ace-admin/src/main/resources/application.yml b/ace-admin/src/main/resources/application.yml index e193c367..fca69ea3 100644 --- a/ace-admin/src/main/resources/application.yml +++ b/ace-admin/src/main/resources/application.yml @@ -1,6 +1,6 @@ logging: level: - tk.mybatis: DEBUG +# tk.mybatis: DEBUG com.github.wxiaoqi.security.admin: DEBUG spring: application: @@ -70,3 +70,18 @@ auth: token-header: client-token pub-key: path: client/pub.key + +#redis-cache 相关 +redis: + pool: + maxActive: 300 + maxIdle: 100 + maxWait: 1000 + host: 127.0.0.1 + port: 6379 + password: + timeout: 2000 + # 服务或应用名 + sysName: ace-admin + enable: true + database: 0 \ No newline at end of file diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/msg/ListRestResponse.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/msg/ListRestResponse.java index d8f54259..07fc3c4c 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/msg/ListRestResponse.java +++ b/ace-common/src/main/java/com/github/wxiaoqi/security/common/msg/ListRestResponse.java @@ -7,27 +7,11 @@ package com.github.wxiaoqi.security.common.msg; * @create 2017-06-09 7:32 */ public class ListRestResponse { - boolean rel; String msg; T result; int count; - String callback; - public String getCallback() { - return callback; - } - public void setCallback(String callback) { - this.callback = callback; - } - - public boolean isRel() { - return rel; - } - - public void setRel(boolean rel) { - this.rel = rel; - } public String getMsg() { return msg; @@ -63,11 +47,6 @@ public class ListRestResponse { return this; } - public ListRestResponse rel(boolean rel) { - this.setRel(rel); - return this; - } - public ListRestResponse msg(String msg) { this.setMsg(msg); return this; diff --git a/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java b/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java index a2dae2a9..0c58f311 100644 --- a/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java +++ b/ace-common/src/main/java/com/github/wxiaoqi/security/common/rest/BaseController.java @@ -5,13 +5,10 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.TableResultResponse; import com.github.wxiaoqi.security.common.util.Query; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.util.Base64Utils; import org.springframework.web.bind.annotation.*; -import tk.mybatis.mapper.entity.Example; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; import java.util.List; import java.util.Map; @@ -31,26 +28,29 @@ public class BaseController { @ResponseBody public ObjectRestResponse add(@RequestBody Entity entity){ baseBiz.insertSelective(entity); - return new ObjectRestResponse().rel(true); + return new ObjectRestResponse(); } @RequestMapping(value = "/{id}",method = RequestMethod.GET) @ResponseBody public ObjectRestResponse get(@PathVariable int id){ - return new ObjectRestResponse().rel(true).data(baseBiz.selectById(id)); + ObjectRestResponse entityObjectRestResponse = new ObjectRestResponse<>(); + Object o = baseBiz.selectById(id); + entityObjectRestResponse.data((Entity)o); + return entityObjectRestResponse; } @RequestMapping(value = "/{id}",method = RequestMethod.PUT) @ResponseBody public ObjectRestResponse update(@RequestBody Entity entity){ baseBiz.updateSelectiveById(entity); - return new ObjectRestResponse().rel(true); + return new ObjectRestResponse(); } @RequestMapping(value = "/{id}",method = RequestMethod.DELETE) @ResponseBody public ObjectRestResponse remove(@PathVariable int id){ baseBiz.deleteById(id); - return new ObjectRestResponse().rel(true); + return new ObjectRestResponse(); } @RequestMapping(value = "/all",method = RequestMethod.GET) diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/vo/FrontUser.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/vo/FrontUser.java deleted file mode 100644 index 3386c2ea..00000000 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/vo/FrontUser.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.github.wxiaoqi.security.gate.vo; - -import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; - -import java.util.List; - -/** - * Created by ace on 2017/8/22. - */ -public class FrontUser { - public String id; - public String username; - public String name; - private String description; - private String image; - private List menus; - private List elements; - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - public List getMenus() { - return menus; - } - - public void setMenus(List menus) { - this.menus = menus; - } - - public List getElements() { - return elements; - } - - public void setElements(List elements) { - this.elements = elements; - } -} -- Gitee From 24dd0e58c763a5e269bcc6ca978617a7865aae1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Fri, 17 Nov 2017 08:26:20 +0800 Subject: [PATCH 08/15] =?UTF-8?q?[Feature]=20=E8=A7=A3=E5=86=B32.2?= =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/auth/service/AuthService.java | 4 ---- .../auth/service/impl/AuthServiceImpl.java | 2 +- .../wxiaoqi/security/gate/config/ZuulConfig.java | 15 --------------- .../security/gate/filter/AdminAccessFilter.java | 1 - 4 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/ZuulConfig.java diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java index 2a3bb959..b850ff93 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/AuthService.java @@ -5,9 +5,5 @@ public interface AuthService { String login(String username, String password) throws Exception; String refresh(String oldToken); void validate(String token) throws Exception; -<<<<<<< HEAD -// FrontUser getUserInfo(String token) throws Exception; -======= ->>>>>>> v2.2-SNAPSHOT Boolean invalid(String token); } diff --git a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java index 53f48604..c904ae8c 100755 --- a/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java +++ b/ace-auth/ace-auth-server/src/main/java/com/github/wxiaoqi/security/auth/service/impl/AuthServiceImpl.java @@ -1,10 +1,10 @@ package com.github.wxiaoqi.security.auth.service.impl; import com.github.wxiaoqi.security.api.vo.user.UserInfo; +import com.github.wxiaoqi.security.auth.common.util.jwt.JWTInfo; import com.github.wxiaoqi.security.auth.feign.IUserService; import com.github.wxiaoqi.security.auth.service.AuthService; import com.github.wxiaoqi.security.auth.util.user.JwtTokenUtil; -import com.github.wxiaoqi.security.common.util.jwt.JWTInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/ZuulConfig.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/ZuulConfig.java deleted file mode 100644 index de80468c..00000000 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/config/ZuulConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.wxiaoqi.security.gate.config; - -import com.github.wxiaoqi.security.auth.client.interceptor.ServiceFeignInterceptor; -import org.springframework.context.annotation.Bean; - -/** - * Created by ace on 2017/9/12. - */ -//@Configuration -public class ZuulConfig { - @Bean - ServiceFeignInterceptor getClientTokenInterceptor(){ - return new ServiceFeignInterceptor(); - } -} diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java index e98d8714..e790c7f3 100644 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java +++ b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java @@ -49,7 +49,6 @@ import java.util.regex.Pattern; @Slf4j public class AdminAccessFilter extends ZuulFilter { -// @Autowired private IUserService userService; @Autowired private ILogService logService; -- Gitee From 063b37c6958686dc79875d1daee5815873f500a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Fri, 17 Nov 2017 08:36:08 +0800 Subject: [PATCH 09/15] =?UTF-8?q?[Feature]=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ace-admin集成`ace-cache` ace-auth集成`rabbitmq` --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7c765e73..c1c63742 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,13 @@ https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ryr8l --------- +# 更新日志 +### 2017年11月17日 v2.2-SNARSHOT + +- ace-admin集成`ace-cache` +- ace-auth集成`rabbitmq` + + # 模块说明 ![img](http://upload-images.jianshu.io/upload_images/5700335-5ceb4c68e4080107.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) @@ -49,14 +56,14 @@ https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ryr8l 下载完后端代码后,记得先安装`lombok插件`,否则你的IDE会报代码缺失。 ## 后端工程启动 ### 环境须知 -- mysql数据库一个,redis数据库一个 +- mysql一个,redis一个,rabbitmq一个 - jdk1.8 - IDE插件一个,`lombok插件`,具体百度即可 ### 运行步骤 - 运行数据库脚本:依次运行数据库:ace-admin/db/init.sql、ace-auth-server/db/init.sql - 修改配置数据库配置:ace-admin/src/main/resources/application.yml、ace-gate/src/main/resources/application.yml -- 依次运行main类:CenterBootstrap(ace-center)、ConfigServerBootstrap(ace-config)、GateBootstrap(ace-gate)、AdminBootstrap(ace-admin)、AuthBootstrap(ace-auth-server) +- 按`顺序`运行main类:CenterBootstrap(ace-center)、ConfigServerBootstrap(ace-config)、AdminBootstrap(ace-admin)、AuthBootstrap(ace-auth-server)、GateBootstrap(ace-gate) ### 项目结构 ``` -- Gitee From b629c0f7ab2c36f72e2b88af92042c54241fe5e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Fri, 17 Nov 2017 15:46:31 +0800 Subject: [PATCH 10/15] =?UTF-8?q?[Feature]=20=E5=8D=87=E7=BA=A7ace-cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ace-admin/pom.xml | 12 +----------- .../wxiaoqi/security/admin/AdminBootstrap.java | 6 ++---- .../wxiaoqi/security/admin/config/WebConfig.java | 13 ++++++------- 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/ace-admin/pom.xml b/ace-admin/pom.xml index a6198164..05b5bdda 100644 --- a/ace-admin/pom.xml +++ b/ace-admin/pom.xml @@ -160,17 +160,7 @@ com.github.wxiaoqi ace-cache - 0.0.2-SNAPSHOT - - - org.webjars - jquery - 2.1.4 - - - org.webjars - bootstrap - 3.1.0 + 0.0.2 diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java index 4b927c7c..7668f0b1 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java @@ -1,5 +1,6 @@ package com.github.wxiaoqi.security.admin; +import com.ace.cache.EnableAceCache; import com.github.wxiaoqi.security.auth.client.EnableAceAuthClient; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -7,8 +8,6 @@ import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableScheduling; /** @@ -24,8 +23,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling @EnableAceAuthClient @ServletComponentScan("com.github.wxiaoqi.security.admin.config.druid") -@ComponentScan({"com.ace.cache","com.github.wxiaoqi.security.admin"}) -@EnableAspectJAutoProxy +@EnableAceCache public class AdminBootstrap { public static void main(String[] args) { new SpringApplicationBuilder(AdminBootstrap.class).web(true).run(args); } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java index 1f6b1f29..0debbea7 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java @@ -7,7 +7,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.ArrayList; @@ -54,10 +53,10 @@ public class WebConfig extends WebMvcConfigurerAdapter { return list; } - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/static/cache/**").addResourceLocations( - "classpath:/META-INF/static/"); - super.addResourceHandlers(registry); - } +// @Override +// public void addResourceHandlers(ResourceHandlerRegistry registry) { +// registry.addResourceHandler("/static/cache/**").addResourceLocations( +// "classpath:/META-INF/static/"); +// super.addResourceHandlers(registry); +// } } -- Gitee From 044098ad62e325f2a6e92d3168bd4035066a8c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Sun, 19 Nov 2017 14:44:51 +0800 Subject: [PATCH 11/15] =?UTF-8?q?[Feature]=20=E4=BC=98=E5=8C=96=E7=BD=91?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、采用parallelStream优化比较 2、网关模块加入缓存 --- .../security/admin/biz/ElementBiz.java | 4 +- .../wxiaoqi/security/admin/biz/MenuBiz.java | 6 +- .../wxiaoqi/security/admin/rpc/UserRest.java | 3 + .../gate/filter/AdminAccessFilter.java | 112 ++++++++---------- pom.xml | 7 ++ 5 files changed, 67 insertions(+), 65 deletions(-) diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java index c44e4a97..81a4fd51 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java @@ -32,13 +32,13 @@ public class ElementBiz extends BaseBiz { } @Override - @CacheClear(pre="permission:ele") + @CacheClear(keys={"permission:ele","permission"}) public void insertSelective(Element entity) { super.insertSelective(entity); } @Override - @CacheClear(pre="permission:ele") + @CacheClear(keys={"permission:ele","permission"}) public void updateSelectiveById(Element entity) { super.updateSelectiveById(entity); } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java index 6da6f46d..23c09380 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java @@ -25,7 +25,7 @@ public class MenuBiz extends BaseBiz { } @Override - @CacheClear(pre="permission:menu") + @CacheClear(keys={"permission:menu","permission"}) public void insertSelective(Menu entity) { if (AdminCommonConstant.ROOT == entity.getParentId()) { entity.setPath("/" + entity.getCode()); @@ -37,7 +37,7 @@ public class MenuBiz extends BaseBiz { } @Override - @CacheClear(pre="permission:menu") + @CacheClear(keys={"permission:menu","permission"}) public void updateById(Menu entity) { if (AdminCommonConstant.ROOT == entity.getParentId()) { entity.setPath("/" + entity.getCode()); @@ -49,7 +49,7 @@ public class MenuBiz extends BaseBiz { } @Override - @CacheClear(pre="permission:menu") + @CacheClear(keys={"permission:menu","permission"}) public void updateSelectiveById(Menu entity) { super.updateSelectiveById(entity); } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java index 78f0ad20..19ecf0ae 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rpc/UserRest.java @@ -1,5 +1,6 @@ package com.github.wxiaoqi.security.admin.rpc; +import com.ace.cache.annotation.Cache; import com.github.wxiaoqi.security.admin.rpc.service.PermissionService; import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; import com.github.wxiaoqi.security.api.vo.user.UserInfo; @@ -20,12 +21,14 @@ public class UserRest { @Autowired private PermissionService permissionService; + @Cache(key="permission") @RequestMapping(value = "/permissions", method = RequestMethod.GET) public @ResponseBody List getAllPermission(){ return permissionService.getAllPermission(); } + @Cache(key="permission:u{1}") @RequestMapping(value = "/user/un/{username}/permissions", method = RequestMethod.GET) public @ResponseBody List getPermissionByUsername(@PathVariable("username") String username){ return permissionService.getPermissionByUsername(username); diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java index e790c7f3..a058ce67 100644 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java +++ b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java @@ -16,8 +16,6 @@ import com.github.wxiaoqi.security.common.util.ClientUtil; import com.github.wxiaoqi.security.gate.feign.ILogService; import com.github.wxiaoqi.security.gate.feign.IUserService; import com.github.wxiaoqi.security.gate.utils.DBLog; -import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; import com.netflix.appinfo.InstanceInfo; import com.netflix.discovery.EurekaClient; import com.netflix.zuul.ZuulFilter; @@ -30,14 +28,16 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestMethod; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import java.net.URLEncoder; -import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.function.Predicate; import java.util.regex.Pattern; +import java.util.stream.Stream; /** * ${DESCRIPTION} @@ -75,7 +75,7 @@ public class AdminAccessFilter extends ZuulFilter { @PostConstruct public void init() { - InstanceInfo prodSvcInfo = discoveryClient.getNextServerFromEureka("ACE-ADMIN", false); + InstanceInfo prodSvcInfo = discoveryClient.getNextServerFromEureka("ACE-ADMIN", false); ServiceFeignInterceptor serviceFeignInterceptor = new ServiceFeignInterceptor(); serviceFeignInterceptor.setServiceAuthConfig(serviceAuthConfig); serviceFeignInterceptor.setServiceAuthUtil(serviceAuthUtil); @@ -114,101 +114,92 @@ public class AdminAccessFilter extends ZuulFilter { } IJWTInfo user = null; try { - user = getJWTUser(request,ctx); + user = getJWTUser(request, ctx); } catch (Exception e) { - setFailedRequest(JSON.toJSONString(new TokenErrorResponse(e.getMessage())),200); + setFailedRequest(JSON.toJSONString(new TokenErrorResponse(e.getMessage())), 200); return null; } - List permissionInfos = userService.getAllPermissionInfo(); + List permissionIfs = userService.getAllPermissionInfo(); // 判断资源是否启用权限约束 - Collection result = getPermissionInfos(requestUri, method, permissionInfos); - if(result.size()>0){ - checkUserPermission(requestUri, method, ctx, user); + Stream result = getPermissionIfs(requestUri, method, permissionIfs); + Object[] permissions = result.toArray(); + if (permissions.length > 0) { + checkUserPermission((PermissionInfo[]) permissions, ctx, user); } // 申请客户端密钥头 - ctx.addZuulRequestHeader(serviceAuthConfig.getTokenHeader(),serviceAuthUtil.getClientToken()); + ctx.addZuulRequestHeader(serviceAuthConfig.getTokenHeader(), serviceAuthUtil.getClientToken()); BaseContextHandler.remove(); return null; } /** * 获取目标权限资源 + * * @param requestUri * @param method * @param serviceInfo * @return */ - private Collection getPermissionInfos(final String requestUri, final String method, List serviceInfo) { - return Collections2.filter(serviceInfo, new Predicate() { - @Override - public boolean apply(PermissionInfo permissionInfo) { - String url = permissionInfo.getUri(); - String uri = url.replaceAll("\\{\\*\\}", "[a-zA-Z\\\\d]+"); - String regEx = "^" + uri + "$"; - return (Pattern.compile(regEx).matcher(requestUri).find() || requestUri.startsWith(url + "/")) - && method.equals(permissionInfo.getMethod()); - } - }); + private Stream getPermissionIfs(final String requestUri, final String method, List serviceInfo) { + return serviceInfo.parallelStream().filter(new Predicate() { + @Override + public boolean test(PermissionInfo permissionInfo) { + String url = permissionInfo.getUri(); + String uri = url.replaceAll("\\{\\*\\}", "[a-zA-Z\\\\d]+"); + String regEx = "^" + uri + "$"; + return (Pattern.compile(regEx).matcher(requestUri).find() || requestUri.startsWith(url + "/")) + && method.equals(permissionInfo.getMethod()); + } + }); } private void setCurrentUserInfoAndLog(RequestContext ctx, IJWTInfo user, PermissionInfo pm) { - String host = ClientUtil.getClientIp(ctx.getRequest()); + String host = ClientUtil.getClientIp(ctx.getRequest()); ctx.addZuulRequestHeader("userId", user.getId()); ctx.addZuulRequestHeader("userName", URLEncoder.encode(user.getName())); ctx.addZuulRequestHeader("userHost", ClientUtil.getClientIp(ctx.getRequest())); - LogInfo logInfo = new LogInfo(pm.getMenu(),pm.getName(),pm.getUri(),new Date(),user.getId(),user.getName(),host); + LogInfo logInfo = new LogInfo(pm.getMenu(), pm.getName(), pm.getUri(), new Date(), user.getId(), user.getName(), host); DBLog.getInstance().setLogService(logService).offerQueue(logInfo); } /** * 返回session中的用户信息 + * * @param request * @param ctx * @return */ - private IJWTInfo getJWTUser(HttpServletRequest request,RequestContext ctx) throws Exception { + private IJWTInfo getJWTUser(HttpServletRequest request, RequestContext ctx) throws Exception { String authToken = request.getHeader(userAuthConfig.getTokenHeader()); - if(StringUtils.isBlank(authToken)){ + if (StringUtils.isBlank(authToken)) { authToken = request.getParameter("token"); } - ctx.addZuulRequestHeader(userAuthConfig.getTokenHeader(),authToken); + ctx.addZuulRequestHeader(userAuthConfig.getTokenHeader(), authToken); BaseContextHandler.setToken(authToken); return userAuthUtil.getInfoFromToken(authToken); } - /** - * 读取权限 - * @param request - * @param username - * @return - */ - private List getPermissionInfos(HttpServletRequest request, String username) { - List permissionInfos; - if (request.getSession().getAttribute("permission") == null) { - permissionInfos = userService.getPermissionByUsername(username); - request.getSession().setAttribute("permission", permissionInfos); - } else { - permissionInfos = (List) request.getSession().getAttribute("permission"); - } - return permissionInfos; - } - /** - * 权限校验 - * @param requestUri - * @param method - */ - private void checkUserPermission(final String requestUri, final String method ,RequestContext ctx,IJWTInfo user) { - log.debug("uri:" + requestUri + "----method:" + method); - List permissionInfos = getPermissionInfos(ctx.getRequest(), user.getUniqueName()) ; - Collection result = getPermissionInfos(requestUri, method, permissionInfos); - if (result.size() <= 0) { + private void checkUserPermission(PermissionInfo[] permissions, RequestContext ctx, IJWTInfo user) { + List permissionInfos = userService.getPermissionByUsername(user.getUniqueName()); + PermissionInfo current = null; + for (PermissionInfo info : permissions) { + boolean anyMatch = permissionInfos.parallelStream().anyMatch(new Predicate() { + @Override + public boolean test(PermissionInfo permissionInfo) { + return permissionInfo.getCode().equals(info.getCode()); + } + }); + if (anyMatch) { + current = info; + break; + } + } + if (current == null) { setFailedRequest(JSON.toJSONString(new TokenForbiddenResponse("Token Forbidden!")), 200); - } else{ - PermissionInfo[] pms = result.toArray(new PermissionInfo[]{}); - PermissionInfo pm = pms[0]; - if(!"GET".equals(method)){ - setCurrentUserInfoAndLog(ctx, user, pm); + } else { + if (!RequestMethod.GET.equals(current.getMethod())) { + setCurrentUserInfoAndLog(ctx, user, current); } } } @@ -216,6 +207,7 @@ public class AdminAccessFilter extends ZuulFilter { /** * URI是否以什么打头 + * * @param requestUri * @return */ @@ -230,7 +222,7 @@ public class AdminAccessFilter extends ZuulFilter { } /** - * Reports an error message given a response body and code. + * 网关抛异常 * * @param body * @param code @@ -242,7 +234,7 @@ public class AdminAccessFilter extends ZuulFilter { if (ctx.getResponseBody() == null) { ctx.setResponseBody(body); ctx.setSendZuulResponse(false); -// throw new RuntimeException("Code: " + code + ", " + body); //optional } } + } diff --git a/pom.xml b/pom.xml index 2e1d5ec1..6e543915 100644 --- a/pom.xml +++ b/pom.xml @@ -54,6 +54,13 @@ provided + + + oss + oss + https://oss.sonatype.org/content/groups/public + + -- Gitee From 74ab88b5a31ae38b16062ca0a503ab6f992195a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Sun, 19 Nov 2017 15:46:01 +0800 Subject: [PATCH 12/15] =?UTF-8?q?[Fixbug]=20=E4=BF=AE=E5=A4=8D=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wxiaoqi/security/admin/config/WebConfig.java | 3 ++- .../client/interceptor/ServiceAuthRestInterceptor.java | 2 +- .../security/gate/filter/AdminAccessFilter.java | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java index 0debbea7..6f801192 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/config/WebConfig.java @@ -47,7 +47,8 @@ public class WebConfig extends WebMvcConfigurerAdapter { String[] urls = { "/v2/api-docs", "/swagger-resources/**", - "/cache/**" + "/cache/**", + "/api/log/save" }; Collections.addAll(list, urls); return list; diff --git a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java index 1af40c8f..aab22d5c 100644 --- a/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java +++ b/ace-auth/ace-auth-client/src/main/java/com/github/wxiaoqi/security/auth/client/interceptor/ServiceAuthRestInterceptor.java @@ -44,7 +44,7 @@ public class ServiceAuthRestInterceptor extends HandlerInterceptorAdapter { String token = request.getHeader(serviceAuthConfig.getTokenHeader()); IJWTInfo infoFromToken = serviceAuthUtil.getInfoFromToken(token); - String uniqueName = infoFromToken.getUniqueName(); // clientName(code) + String uniqueName = infoFromToken.getUniqueName(); for(String client:serviceAuthUtil.getAllowedClient()){ if(client.equals(uniqueName)){ return super.preHandle(request, response, handler); diff --git a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java index a058ce67..38ebaefb 100644 --- a/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java +++ b/ace-gate/ace-gate-server/src/main/java/com/github/wxiaoqi/security/gate/filter/AdminAccessFilter.java @@ -37,6 +37,7 @@ import java.util.Date; import java.util.List; import java.util.function.Predicate; import java.util.regex.Pattern; +import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -121,10 +122,11 @@ public class AdminAccessFilter extends ZuulFilter { } List permissionIfs = userService.getAllPermissionInfo(); // 判断资源是否启用权限约束 - Stream result = getPermissionIfs(requestUri, method, permissionIfs); - Object[] permissions = result.toArray(); + Stream stream = getPermissionIfs(requestUri, method, permissionIfs); + List result = stream.collect(Collectors.toList()); + PermissionInfo[] permissions = result.toArray(new PermissionInfo[]{}); if (permissions.length > 0) { - checkUserPermission((PermissionInfo[]) permissions, ctx, user); + checkUserPermission(permissions, ctx, user); } // 申请客户端密钥头 ctx.addZuulRequestHeader(serviceAuthConfig.getTokenHeader(), serviceAuthUtil.getClientToken()); @@ -198,7 +200,7 @@ public class AdminAccessFilter extends ZuulFilter { if (current == null) { setFailedRequest(JSON.toJSONString(new TokenForbiddenResponse("Token Forbidden!")), 200); } else { - if (!RequestMethod.GET.equals(current.getMethod())) { + if (!RequestMethod.GET.toString().equals(current.getMethod())) { setCurrentUserInfoAndLog(ctx, user, current); } } -- Gitee From 0d584c9c80c375d83d2feacb8b96363fff8e1c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Wed, 22 Nov 2017 08:29:39 +0800 Subject: [PATCH 13/15] =?UTF-8?q?[Feature]=20=E5=A2=9E=E5=8A=A0=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/github/wxiaoqi/security/admin/AdminBootstrap.java | 2 ++ .../java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java | 2 ++ .../java/com/github/wxiaoqi/security/admin/biz/GateLogBiz.java | 2 ++ .../java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java | 2 ++ .../com/github/wxiaoqi/security/admin/biz/GroupTypeBiz.java | 2 ++ .../java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java | 2 ++ .../github/wxiaoqi/security/admin/biz/ResourceAuthorityBiz.java | 2 ++ .../java/com/github/wxiaoqi/security/admin/biz/UserBiz.java | 2 ++ 8 files changed, 16 insertions(+) diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java index 7668f0b1..06315728 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/AdminBootstrap.java @@ -9,6 +9,7 @@ import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; /** * ${DESCRIPTION} @@ -24,6 +25,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableAceAuthClient @ServletComponentScan("com.github.wxiaoqi.security.admin.config.druid") @EnableAceCache +@EnableTransactionManagement public class AdminBootstrap { public static void main(String[] args) { new SpringApplicationBuilder(AdminBootstrap.class).web(true).run(args); } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java index 81a4fd51..85fca33a 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ElementBiz.java @@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.admin.entity.Element; import com.github.wxiaoqi.security.admin.mapper.ElementMapper; import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -16,6 +17,7 @@ import java.util.List; * @create 2017-06-23 20:27 */ @Service +@Transactional(rollbackFor = Exception.class) public class ElementBiz extends BaseBiz { @Cache(key="permission:ele:u{1}") public List getAuthorityElementByUserId(String userId){ diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GateLogBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GateLogBiz.java index 4cf32119..ad33f594 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GateLogBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GateLogBiz.java @@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.entity.GateLog; import com.github.wxiaoqi.security.admin.mapper.GateLogMapper; import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * ${DESCRIPTION} @@ -12,6 +13,7 @@ import org.springframework.stereotype.Service; * @create 2017-07-01 14:36 */ @Service +@Transactional(rollbackFor = Exception.class) public class GateLogBiz extends BaseBiz { @Override diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java index eb60a639..3bd60736 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupBiz.java @@ -15,6 +15,7 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.*; @@ -26,6 +27,7 @@ import java.util.*; * @create 2017-06-12 8:48 */ @Service +@Transactional(rollbackFor = Exception.class) public class GroupBiz extends BaseBiz { @Autowired private UserMapper userMapper; diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupTypeBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupTypeBiz.java index 4815d6ef..7deb207f 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupTypeBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/GroupTypeBiz.java @@ -5,6 +5,7 @@ import org.springframework.stereotype.Service; import com.github.wxiaoqi.security.admin.entity.GroupType; import com.github.wxiaoqi.security.admin.mapper.GroupTypeMapper; import com.github.wxiaoqi.security.common.biz.BaseBiz; +import org.springframework.transaction.annotation.Transactional; /** * ${DESCRIPTION} @@ -13,5 +14,6 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; * @create 2017-06-12 8:48 */ @Service +@Transactional(rollbackFor = Exception.class) public class GroupTypeBiz extends BaseBiz { } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java index 23c09380..ccc40977 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MenuBiz.java @@ -7,6 +7,7 @@ import com.github.wxiaoqi.security.admin.entity.Menu; import com.github.wxiaoqi.security.admin.mapper.MenuMapper; import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -17,6 +18,7 @@ import java.util.List; * @create 2017-06-12 8:48 */ @Service +@Transactional(rollbackFor = Exception.class) public class MenuBiz extends BaseBiz { @Override @Cache(key="permission:menu") diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ResourceAuthorityBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ResourceAuthorityBiz.java index a3fb6e09..262adc40 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ResourceAuthorityBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/ResourceAuthorityBiz.java @@ -4,10 +4,12 @@ import com.github.wxiaoqi.security.admin.entity.ResourceAuthority; import com.github.wxiaoqi.security.admin.mapper.ResourceAuthorityMapper; import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * Created by Ace on 2017/6/19. */ @Service +@Transactional(rollbackFor = Exception.class) public class ResourceAuthorityBiz extends BaseBiz { } diff --git a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java index ea2c7cea..3c5dd2a6 100644 --- a/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java +++ b/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserBiz.java @@ -11,6 +11,7 @@ import com.github.wxiaoqi.security.common.constant.UserConstant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * ${DESCRIPTION} @@ -19,6 +20,7 @@ import org.springframework.stereotype.Service; * @create 2017-06-08 16:23 */ @Service +@Transactional(rollbackFor = Exception.class) public class UserBiz extends BaseBiz { @Autowired -- Gitee From 620ad1d027b42712b3db70d1df3423f2c6de3fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Wed, 22 Nov 2017 17:56:50 +0800 Subject: [PATCH 14/15] =?UTF-8?q?[Feature]=20=E6=9B=B4=E6=96=B0readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ----- dump.rdb | Bin 0 -> 4357 bytes 2 files changed, 5 deletions(-) create mode 100644 dump.rdb diff --git a/README.md b/README.md index c1c63742..ce75576f 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,6 @@ http://43.248.136.159:9999/ ## [老A专属优惠链接](https://www.chanmir.com/?u=45433C),优惠卷:2B3158 - -### 阿里云服务器太贵?送你阿里云神卷,优惠最高达20% -https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ryr8l9eb&utm_source=ryr8l9eb - - ![img](http://upload-images.jianshu.io/upload_images/5700335-002735d1727ec11b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..1ead2f088bd4578aa182594d833895a10bd1ec4b GIT binary patch literal 4357 zcmds)dr(tX9>;I)%}pRACP)BL#6v)kcWx5$U~IV{AXt2~Vqa^AT*3vSKrp$efYcx= zDzH-DR;!6sx9hA5TCdkzZbZ7-TBj#xBkLxOxrSWh4aMXaHBQbmNZ%kG zoU@7j@b%VN&)$e=^{}-$O>EPL16O8Yx3QZF#Vy^2?vZKnx zXd+$bt*+^6i4S_IptXRam;Z1@gVFHA6~)Pfs`lxs^S`%h6WiQ6QFg^c%Ni(?uuvQI z17)XYo4MMg2XBg4c)0lU<$Vi&)}eE_YK3jp3CHAK&NMUith=CwYp$+k8-<-G#hEK= zK~hxsz$>9$Z-p=T!vj0*@i^DuqT|Vu(#q1RQV@+dGfi|E8QkR?KYALdajva}R+BZY z9Or5l9$Vc`P$tWpIOsgO5!ZEQLu?COH@F2C&Kk_ZIA8!W?-p`w@9|*&K^VCOUs_rP z(tK@Ep}yVY`!0<8-xz=C6o~b0r8h#^mO(q5wUxewGqtrKAI{l|uUfep5?<+{SA(Zc z0E@33s&3F#Fs2P;?dKcl@FzLwYHHe^=$_HO0Hagi&;O_|2ht(U9 z^b#35c_w_k7no6W3hjV|hqgntr^_9PybRMl!Z&J&SvbEW_(#=rY9n^dR)jI>EY;68GOx_bzU4fe3 zVD1%^7#mbxh3efw!&Mm3M=~5+>8j_|sZpW*{iBzThYp_!esDPDt1q$VdF_cWR9>Hx zCl-|G2HSYW+)?#zK1)ll6V8&CE1;%>&yYfSd(BBmd`APHnsJ2YzXOR~JKy%c4vNnl zK(l%(o~^H>HwiuV+&v90cz_nBbu(Oip}bra1H*A{N>D?!v#G`9<`$(-_N*w5Jg2g` zmff75A;?113`nJ8WmAd)T7~FVZf6T87#NrbG(>}&tpkx*9+VUVt;FfDC*gHW4*dwN zQPv7BmaS`H+-x&f0hCxit(0&L5VOfww|Vkv7!T`n+IxLb;8B8ea*cHFed43zB!aqP z3Gu%Jm8`X;w%q06z!Or+V9C`32}XHi@fCs|)1=GYxkXF8(UK}B9UVdC>rMG4y;VJW=k3dN~!m?)S5!F$=>}k6Xt4g_wW|`@^Q1SsER|B!iqRdh00n8)RUyNDN zqQ#K(B9fkN;5vF#?ql~XTm=x)B$a#w7WiXE$>ZDi4tHQV>{~(d9Iy>u=LrKDe*I$j z;z>F&`Td1UM-4CF=6u7B!@=1{c)2x|#>J*qn7wm&i3xYOxw9D(eE}pSWqDxU**vBU zjDYB~c`}pDYBgF--~fFH#D}mvG}~z}8$1pc`Q4d)`EW_*;|&ji zieT7+dhXLo3eZG31w|OMbrY-s3W<&aG14YhM2wOUti4J=hzOX+$I2>L*-5^U+}JJoSFU6 zcTomYchmgP(Me7rjRvzpd^ctW^$0sESz3y4&Hac<_4O4UM6zRpO$a{$Iw97_$E8Uq zJ?-_MfYN?GE1j;e?~+dXOdifsX~9Vi8L7k?8$35{hi8qK1*QR~3c{DT+>tn&jqWBmv7%LMkDWb1dRK^Qdp2F83~OeKFt}s634s(g0Eo zho!&to+c;h4VJ;A(-NjNWA7Ad|4g@ol~DC!h&YJI!g1;6-eXht1RnDp8&i}rDa<1f zI}(x{JUt|k*EkkGiW!2$9hl&oV((&@ok#*D4mz~i4v3q(ODSB8_!gh_8Ul{e}t z0W}uagc(9a@0Zdyd8vDv$lc*MBT_7-FW0!ylltOIA7-J|`miP$73%5BjQ(YkRuBH= zlozY^!R4F8vi}N86QF7!5WUa077`r+X%{58pe6v*IXeR*+*nm^;^4Qwjibs#m@z>7 z6SL}0hOsV~-6JF@ZSP|@cWH{+#a|XfX=jksem(zNCK4ugy&|`7^;yO7eolYFwBmw&Ix- z+QKVY%oHMS3G0@w<+XKRsXBZk6M#mKe)Gx1MIdgbr--yIm;moE9WIKT+o7v*y19m0 zMvVG`f6PFwS0iPc7-yqb5iOdCfYl~fjkA$m)!=Goz3~&a5jn|0P%LXUR!13I@|hoXMRb&r`={LH@S=0^_vsjs~XqmQF`|27OHX0GDp#qMVoUC z%Wd4smZzL7sK7n!W>A8M54;7U?jl${6T#RDNOppBk-dAB;-$rE%C{P9!u81>PplDE zNEgx;pzysZn^>t}u>I49K5yn`%(xec{y4luRUZ8RPAbA~=}l(JY^5l1xBeGdC0B;q zC<}`H$&n>Djj-qq`MfsgCq$K}*(^jffd&gr6;&%0QV@87TcR z5M8urbRjd5fU@pSK&MiJroDuLvRQ(Pz1VZN;IxTo?**ZI7DAUkGy{nj?0lQ;d++u4 RCed}?NkuI?7Ong?@jt<3Yu^9> literal 0 HcmV?d00001 -- Gitee From 84b14314f84a678edf33822b79c674bc75ca0289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=B5=A9=E5=BD=AC?= Date: Sat, 25 Nov 2017 08:30:11 +0800 Subject: [PATCH 15/15] =?UTF-8?q?[Feature]=20=E5=A2=9E=E5=8A=A0=E5=A4=87?= =?UTF-8?q?=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ace-generator/src/main/resources/generator.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ace-generator/src/main/resources/generator.properties b/ace-generator/src/main/resources/generator.properties index f45501b2..9d2b848e 100644 --- a/ace-generator/src/main/resources/generator.properties +++ b/ace-generator/src/main/resources/generator.properties @@ -8,7 +8,7 @@ author=Mr.AG email=463540703@qq.com #表前错误的Unicode字符串! tablePrefix=base_ -#模块前缀 +#前端模块前缀 mainModule=admin #类型转换,配置信息 -- Gitee