From 313e953dea7a9970301d9306c5b54bda679bf385 Mon Sep 17 00:00:00 2001 From: me <791216569@qq.com> Date: Fri, 12 Jun 2020 11:05:30 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9bootstrap.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seqdata-cloud-gateway/src/main/resources/bootstrap.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/seqdata-cloud-gateway/src/main/resources/bootstrap.yml b/seqdata-cloud-gateway/src/main/resources/bootstrap.yml index 02780cf..387a9c0 100644 --- a/seqdata-cloud-gateway/src/main/resources/bootstrap.yml +++ b/seqdata-cloud-gateway/src/main/resources/bootstrap.yml @@ -1,14 +1,16 @@ spring: application: - name: gateway + name: ${APPLICATION_NAME:gateway} cloud: gateway: discovery: locator: enabled: true nacos: + discovery: + server-addr: ${NACOS_ADDR:192.168.1.241}:${NACOS_PORT:8848} config: - server-addr: nacos.seqdata.cn:8848 + server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yml - discovery: - server-addr: nacos.seqdata.cn:8848 \ No newline at end of file + # 公共 文件 + shared-dataids: application.${spring.cloud.nacos.config.file-extension} \ No newline at end of file -- Gitee From 5d5ad74b88007981ab2493ae756c31d449cbe951 Mon Sep 17 00:00:00 2001 From: me <791216569@qq.com> Date: Fri, 12 Jun 2020 11:32:20 +0800 Subject: [PATCH 2/4] =?UTF-8?q?bootstrap=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/bootstrap.yml | 21 ++++++++++++------- .../src/main/resources/bootstrap.yml | 11 ++++++---- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/seqdata-cloud-authz/src/main/resources/bootstrap.yml b/seqdata-cloud-authz/src/main/resources/bootstrap.yml index b06fcb6..620f47e 100644 --- a/seqdata-cloud-authz/src/main/resources/bootstrap.yml +++ b/seqdata-cloud-authz/src/main/resources/bootstrap.yml @@ -1,12 +1,19 @@ spring: application: - name: authz + name: ${APPLICATION_NAME:authz} cloud: + gateway: + discovery: + locator: + enabled: true nacos: - config: - server-addr: nacos.seqdata.cn:8848 - file-extension: yml discovery: - server-addr: nacos.seqdata.cn:8848 -server: - port: 30001 \ No newline at end of file + server-addr: ${NACOS_SERVICE_HOST:192.168.1.241}:${NACOS_SERVICE_PORT:8848} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + file-extension: ${CONFIG_FORMAT:yml} + # 公共文件 + shared-configs[0]: + data-id: ${SHARE_CONFIG_PREFIX:application}.${spring.cloud.nacos.config.file-extension} + # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false + refresh: false \ No newline at end of file diff --git a/seqdata-cloud-gateway/src/main/resources/bootstrap.yml b/seqdata-cloud-gateway/src/main/resources/bootstrap.yml index 387a9c0..9ff0490 100644 --- a/seqdata-cloud-gateway/src/main/resources/bootstrap.yml +++ b/seqdata-cloud-gateway/src/main/resources/bootstrap.yml @@ -8,9 +8,12 @@ spring: enabled: true nacos: discovery: - server-addr: ${NACOS_ADDR:192.168.1.241}:${NACOS_PORT:8848} + server-addr: ${NACOS_SERVICE_HOST:192.168.1.241}:${NACOS_SERVICE_PORT:8848} config: server-addr: ${spring.cloud.nacos.discovery.server-addr} - file-extension: yml - # 公共 文件 - shared-dataids: application.${spring.cloud.nacos.config.file-extension} \ No newline at end of file + file-extension: ${CONFIG_FORMAT:yml} + # 公共文件 + shared-configs[0]: + data-id: ${SHARE_CONFIG_PREFIX:application}.${spring.cloud.nacos.config.file-extension} + # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false + refresh: false \ No newline at end of file -- Gitee From a36190ef3a03610eb6d20a277ff0d80aaf05b767 Mon Sep 17 00:00:00 2001 From: me <791216569@qq.com> Date: Fri, 12 Jun 2020 11:34:12 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=9A=84token=E9=83=BD=E4=B8=80=E6=A0=B7?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth2/AuthzServerConfiguration.java | 202 +++++++++--------- 1 file changed, 102 insertions(+), 100 deletions(-) diff --git a/seqdata-cloud-authz/src/main/java/cn/seqdata/oauth2/AuthzServerConfiguration.java b/seqdata-cloud-authz/src/main/java/cn/seqdata/oauth2/AuthzServerConfiguration.java index e911dba..aef6a63 100644 --- a/seqdata-cloud-authz/src/main/java/cn/seqdata/oauth2/AuthzServerConfiguration.java +++ b/seqdata-cloud-authz/src/main/java/cn/seqdata/oauth2/AuthzServerConfiguration.java @@ -1,7 +1,15 @@ package cn.seqdata.oauth2; -import java.util.*; - +import cn.seqdata.oauth2.jpa.rbac.User; +import cn.seqdata.oauth2.mobile.MobileNonceAuthenticationProvider; +import cn.seqdata.oauth2.mobile.MobileNonceService; +import cn.seqdata.oauth2.mobile.MobileTokenGranter; +import cn.seqdata.oauth2.repos.oauth.ClientDetailRepo; +import cn.seqdata.oauth2.service.JpaClientDetailsService; +import cn.seqdata.oauth2.service.JpaUserDetailsManager; +import cn.seqdata.oauth2.service.UserService; +import cn.seqdata.oauth2.util.SecurityUtils; +import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -29,17 +37,8 @@ import org.springframework.security.oauth2.provider.token.AuthorizationServerTok import org.springframework.security.oauth2.provider.token.TokenEnhancer; import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; -import lombok.AllArgsConstructor; -import cn.seqdata.oauth2.jpa.rbac.User; -import cn.seqdata.oauth2.mobile.MobileNonceAuthenticationProvider; -import cn.seqdata.oauth2.mobile.MobileNonceService; -import cn.seqdata.oauth2.mobile.MobileTokenGranter; -import cn.seqdata.oauth2.repos.oauth.ClientDetailRepo; -import cn.seqdata.oauth2.service.JpaClientDetailsService; -import cn.seqdata.oauth2.service.JpaUserDetailsManager; -import cn.seqdata.oauth2.service.UserService; -import cn.seqdata.oauth2.util.SecurityUtils; +import java.util.*; /** * Author: jrxian @@ -49,56 +48,59 @@ import cn.seqdata.oauth2.util.SecurityUtils; @EnableAuthorizationServer @AllArgsConstructor public class AuthzServerConfiguration extends AuthorizationServerConfigurerAdapter { - private final AuthenticationManager authenticationManager; - private final UserService userService; - private final JpaUserDetailsManager userDetailsService; - private final RedisConnectionFactory redisConnectionFactory; - private final ClientDetailRepo clientDetailRepo; - private final MobileNonceService mobileNonceService; - - @Bean - public PasswordEncoder passwordEncoder() { - return NoOpPasswordEncoder.getInstance(); + private final AuthenticationManager authenticationManager; + private final UserService userService; + private final JpaUserDetailsManager userDetailsService; + private final RedisConnectionFactory redisConnectionFactory; + private final ClientDetailRepo clientDetailRepo; + private final MobileNonceService mobileNonceService; + + @Bean + public PasswordEncoder passwordEncoder() { + return NoOpPasswordEncoder.getInstance(); // return PasswordEncoderFactories.createDelegatingPasswordEncoder(); - } - - @Bean - public TokenStore tokenStore() { - return new RedisTokenStore(redisConnectionFactory); - } - - @Bean - public TokenEnhancer tokenEnhancer() { - return (accessToken, authentication) -> { - if(accessToken instanceof DefaultOAuth2AccessToken) { - Map attributes = new HashMap<>(); - - String clientId = SecurityUtils.clientId(authentication); - String username = SecurityUtils.username(authentication); - User user = userService.loadUser(clientId, username); - - if(Objects.nonNull(user)) { - attributes.put("user_id", user.getId()); - attributes.put("org_id", user.getOrgId()); - } - - ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(attributes); - } - - return accessToken; - }; - } - - @Override - public void configure(AuthorizationServerSecurityConfigurer security) { - security - .tokenKeyAccess("isAuthenticated()") - .checkTokenAccess("isAuthenticated()"); - } - - @Override - public void configure(ClientDetailsServiceConfigurer clients) throws Exception { - clients.withClientDetails(new JpaClientDetailsService(clientDetailRepo)); + } + + @Bean + public TokenStore tokenStore() { + RedisTokenStore redisTokenStore = new RedisTokenStore(redisConnectionFactory); + // 解决每次生成的token都一样的问题 + redisTokenStore.setAuthenticationKeyGenerator(oAuth2Authentication -> UUID.randomUUID().toString()); + return redisTokenStore; + } + + @Bean + public TokenEnhancer tokenEnhancer() { + return (accessToken, authentication) -> { + if (accessToken instanceof DefaultOAuth2AccessToken) { + Map attributes = new HashMap<>(); + + String clientId = SecurityUtils.clientId(authentication); + String username = SecurityUtils.username(authentication); + User user = userService.loadUser(clientId, username); + + if (Objects.nonNull(user)) { + attributes.put("user_id", user.getId()); + attributes.put("org_id", user.getOrgId()); + } + + ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(attributes); + } + + return accessToken; + }; + } + + @Override + public void configure(AuthorizationServerSecurityConfigurer security) { + security + .tokenKeyAccess("isAuthenticated()") + .checkTokenAccess("isAuthenticated()"); + } + + @Override + public void configure(ClientDetailsServiceConfigurer clients) throws Exception { + clients.withClientDetails(new JpaClientDetailsService(clientDetailRepo)); // InMemoryClientDetailsServiceBuilder builder = clients.inMemory(); // builder.withClient("client") @@ -113,43 +115,43 @@ public class AuthzServerConfiguration extends AuthorizationServerConfigurerAdapt // registrationRepository.forEach(clientRegistration -> builder // .withClient(clientRegistration.getRegistrationId()) // .authorizedGrantTypes(AuthorizationGrantType.AUTHORIZATION_CODE.getValue())); - } - - @Override - public void configure(AuthorizationServerEndpointsConfigurer endpoints) { - endpoints - .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) - .authenticationManager(authenticationManager) - .userDetailsService(userDetailsService) - .tokenStore(tokenStore()) - .tokenEnhancer(tokenEnhancer()) - .tokenGranter(tokenGranter(endpoints)); - } - - /** - * 重写 AuthorizationServerEndpointsConfigurer.createDefaultTokenServices,添加 NonceTokenGranter - */ - private TokenGranter tokenGranter(AuthorizationServerEndpointsConfigurer endpoints) { - ClientDetailsService clientDetails = endpoints.getClientDetailsService(); - AuthorizationServerTokenServices tokenServices = endpoints.getTokenServices(); - AuthorizationCodeServices authorizationCodeServices = endpoints.getAuthorizationCodeServices(); - OAuth2RequestFactory requestFactory = endpoints.getOAuth2RequestFactory(); - - List tokenGranters = new ArrayList<>(); - tokenGranters.add(new AuthorizationCodeTokenGranter(tokenServices, authorizationCodeServices, clientDetails, requestFactory)); - tokenGranters.add(new RefreshTokenGranter(tokenServices, clientDetails, requestFactory)); - tokenGranters.add(new ImplicitTokenGranter(tokenServices, clientDetails, requestFactory)); - tokenGranters.add(new ClientCredentialsTokenGranter(tokenServices, clientDetails, requestFactory)); - //用户名密码验证 - if(Objects.nonNull(authenticationManager)) { - tokenGranters.add(new ResourceOwnerPasswordTokenGranter(authenticationManager, tokenServices, clientDetails, requestFactory)); - } - //自定义的手机验证码登录 - if(Objects.nonNull(mobileNonceService)) { - MobileNonceAuthenticationProvider authenticationProvider = new MobileNonceAuthenticationProvider(mobileNonceService); - tokenGranters.add(new MobileTokenGranter(authenticationProvider, tokenServices, clientDetails, requestFactory)); - } - - return new CompositeTokenGranter(tokenGranters); - } + } + + @Override + public void configure(AuthorizationServerEndpointsConfigurer endpoints) { + endpoints + .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) + .authenticationManager(authenticationManager) + .userDetailsService(userDetailsService) + .tokenStore(tokenStore()) + .tokenEnhancer(tokenEnhancer()) + .tokenGranter(tokenGranter(endpoints)); + } + + /** + * 重写 AuthorizationServerEndpointsConfigurer.createDefaultTokenServices,添加 NonceTokenGranter + */ + private TokenGranter tokenGranter(AuthorizationServerEndpointsConfigurer endpoints) { + ClientDetailsService clientDetails = endpoints.getClientDetailsService(); + AuthorizationServerTokenServices tokenServices = endpoints.getTokenServices(); + AuthorizationCodeServices authorizationCodeServices = endpoints.getAuthorizationCodeServices(); + OAuth2RequestFactory requestFactory = endpoints.getOAuth2RequestFactory(); + + List tokenGranters = new ArrayList<>(); + tokenGranters.add(new AuthorizationCodeTokenGranter(tokenServices, authorizationCodeServices, clientDetails, requestFactory)); + tokenGranters.add(new RefreshTokenGranter(tokenServices, clientDetails, requestFactory)); + tokenGranters.add(new ImplicitTokenGranter(tokenServices, clientDetails, requestFactory)); + tokenGranters.add(new ClientCredentialsTokenGranter(tokenServices, clientDetails, requestFactory)); + //用户名密码验证 + if (Objects.nonNull(authenticationManager)) { + tokenGranters.add(new ResourceOwnerPasswordTokenGranter(authenticationManager, tokenServices, clientDetails, requestFactory)); + } + //自定义的手机验证码登录 + if (Objects.nonNull(mobileNonceService)) { + MobileNonceAuthenticationProvider authenticationProvider = new MobileNonceAuthenticationProvider(mobileNonceService); + tokenGranters.add(new MobileTokenGranter(authenticationProvider, tokenServices, clientDetails, requestFactory)); + } + + return new CompositeTokenGranter(tokenGranters); + } } -- Gitee From c90a77499bb3c676ce63c9564731531ba080d0b0 Mon Sep 17 00:00:00 2001 From: me <791216569@qq.com> Date: Fri, 12 Jun 2020 11:50:40 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=BC=95=E5=85=A5mysql8.0,alibaba=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seqdata-cloud-authz/pom.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/seqdata-cloud-authz/pom.xml b/seqdata-cloud-authz/pom.xml index 15ee45f..254dc74 100644 --- a/seqdata-cloud-authz/pom.xml +++ b/seqdata-cloud-authz/pom.xml @@ -47,5 +47,16 @@ mssql-jdbc runtime + + + mysql + mysql-connector-java + runtime + + + com.alibaba + druid-spring-boot-starter + 1.1.20 + -- Gitee