Browse Source

新增官网服务

liweifan 2 years ago
parent
commit
ac1a9f0108

+ 11 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/LoginEntity.java

@@ -8,8 +8,10 @@ public class LoginEntity {
     private String clientId;
 
     private String clientSecret;
-
+    //未注册是否立即注册
     private Boolean isSurportRegister;
+    //注册的用户类型,没有则按照clientId自动分配:STUDENT,TEACHER
+    private String registerUserType;
 
     private String phone;
     
@@ -47,6 +49,14 @@ public class LoginEntity {
         this.clientSecret = clientSecret;
     }
 
+    public String getRegisterUserType() {
+        return registerUserType;
+    }
+
+    public void setRegisterUserType(String registerUserType) {
+        this.registerUserType = registerUserType;
+    }
+
     public String getPhone() {
         return phone;
     }

+ 3 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/filter/PhoneLoginAuthenticationFilter.java

@@ -25,6 +25,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 	private static final String SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY = "smsCode";
 	private static final String clientIdParameter = "clientId";
 	private static final String IS_SURPORT_REGISTER = "isSurportRegister";
+	private static final String REGISTER_USER_TYPE = "registerUserType";
 
 	private static final String DEVICE_NUM = "deviceNum";
 
@@ -47,6 +48,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		String credentials = obtainParameter(request, SPRING_SECURITY_RESTFUL_VERIFY_CODE_KEY);
 		
 		boolean isRegister = StringUtils.equals("true", request.getParameter(IS_SURPORT_REGISTER));
+		String registerUserType = obtainParameter(request, REGISTER_USER_TYPE);
 
 		String clientId = request.getParameter(clientIdParameter).toUpperCase();
 
@@ -63,6 +65,7 @@ public class PhoneLoginAuthenticationFilter extends AbstractAuthenticationProces
 		loginEntity.setPhone(principal);
 		loginEntity.setSmsCode(credentials);
 		loginEntity.setIsSurportRegister(isRegister);
+		loginEntity.setRegisterUserType(registerUserType);
 		loginEntity.setDeviceNum(deviceNum);
 
 		authRequest = new PhoneAuthenticationToken(SecurityConstants.PHONE_PRINCIPAL_PREFIX + principal, loginEntity);

+ 4 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -60,7 +60,9 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 		String clientId = loginEntity.getClientId();
 
 		Boolean isRegister = loginEntity.getIsSurportRegister();
-		
+
+		String registerUserType = loginEntity.getRegisterUserType();
+
 		String deviceNum = loginEntity.getDeviceNum();
 
 		SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(phone);
@@ -70,7 +72,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 				throw new LockedException("用户不存在");
 			}
 			
-			userInfo = sysUserService.registerUser(loginEntity.getPhone(), clientId);
+			userInfo = sysUserService.registerUser(loginEntity.getPhone(), clientId,registerUserType);
 			
 			if (StringUtils.isNotBlank(deviceNum)) {
 				sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);

+ 4 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -121,9 +121,10 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      *
      * @param phone
      * @param clientId
+     * @param registerUserType
      * @return
      */
-    SysUserInfo registerUser(String phone, String clientId);
+    SysUserInfo registerUser(String phone, String clientId, String registerUserType);
 
     /**
      * 刷新token
@@ -164,6 +165,7 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
      */
     UserSetVo getSetDetail(Long id);
+
     /***
      * 用户设置
      * @author liweifan
@@ -177,7 +179,7 @@ public interface SysUserService extends BaseService<Long, SysUser> {
     void updateRongCloudUserInfo(Long userId);
 
     /**
-     *  商城同步管理用户
+     * 商城同步管理用户
      *
      * @param queryInfo
      * @return

+ 42 - 31
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -142,40 +142,51 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public SysUserInfo registerUser(String phone, String clientId) {
+    public SysUserInfo registerUser(String phone, String clientId, String registerUserType) {
+        if (StringUtils.equalsIgnoreCase(registerUserType, "TEACHER")) {
+            return registerTeacher(phone);
+        } else if (StringUtils.equalsIgnoreCase(registerUserType, "STUDENT")) {
+            return registerStudent(phone);
+        } else if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {
+            return registerTeacher(phone);
+        } else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
+            return registerStudent(phone);
+        }
+        return null;
+    }
+
+    private SysUserInfo registerTeacher(String phone) {
         SysUser sysUser = new SysUser();
         sysUser.setPhone(phone);
-        //String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
-        //sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
         String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
         sysUser.setAvatar(defaultHeard);
-        if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {
-            sysUser.setUserType("TEACHER");
-            sysUserDao.insert(sysUser);
-            //添加用户现金账户
-            //imFeignService.register(new ImUserModel(sysUser.getId().toString(),phone,null));
-            //userFeignService.createCashAccount(sysUser.getId());
-            //sysTenantAccount
-            //创建teacher表
-            sysUserDao.saveTeacher(sysUser.getId());
-            //创建老师账户
-            sysUserDao.createUserAccount(sysUser.getId());
 
-            //用户默认昵称
-            sysUser.setUsername("游客"+sysUser.getId());
-            sysUserDao.update(sysUser);
-            return queryUserInfoByPhone(phone);
-        } else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
-            sysUser.setUserType("STUDENT");
-            sysUserDao.insert(sysUser);
-            saveStudent(sysUser);
-
-            //用户默认昵称
-            sysUser.setUsername("游客"+sysUser.getId());
-            sysUserDao.update(sysUser);
-            return queryUserInfoByPhone(phone);
-        }
-        return null;
+        sysUser.setUserType("TEACHER");
+        sysUserDao.insert(sysUser);
+        //创建teacher表
+        sysUserDao.saveTeacher(sysUser.getId());
+        //创建老师账户
+        sysUserDao.createUserAccount(sysUser.getId());
+        //用户默认昵称
+        sysUser.setUsername("游客" + sysUser.getId());
+        sysUserDao.update(sysUser);
+        return queryUserInfoByPhone(phone);
+    }
+
+    private SysUserInfo registerStudent(String phone) {
+        SysUser sysUser = new SysUser();
+        sysUser.setPhone(phone);
+        String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
+        sysUser.setAvatar(defaultHeard);
+
+        sysUser.setUserType("STUDENT");
+        sysUserDao.insert(sysUser);
+        saveStudent(sysUser);
+
+        //用户默认昵称
+        sysUser.setUsername("游客" + sysUser.getId());
+        sysUserDao.update(sysUser);
+        return queryUserInfoByPhone(phone);
     }
 
     @Override
@@ -188,7 +199,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     @Transactional(rollbackFor = Exception.class)
     public void saveStudent(SysUser sysUser) {
         sysUserDao.saveStudent(sysUser.getId());
-        if(!sysUser.getUserType().contains("TEACHER")){
+        if (!sysUser.getUserType().contains("TEACHER")) {
             sysUserDao.createUserAccount(sysUser.getId());
         }
     }
@@ -198,7 +209,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     public void saveTeacher(SysUser sysUser) {
 
         sysUserDao.saveTeacher(sysUser.getId());
-        if(!sysUser.getUserType().contains("STUDENT")){
+        if (!sysUser.getUserType().contains("STUDENT")) {
             sysUserDao.createUserAccount(sysUser.getId());
         }
     }

+ 4 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/AppConstant.java

@@ -49,5 +49,8 @@ public interface AppConstant {
      * 音频分析
      */
     String APPLICATION_AUDIO_ANALYSIS = "audio-analysis";
-
+    /**
+     * 官网
+     */
+    String APPLICATION_WEBSITE = "website";
 }

+ 2 - 1
cooleshow-user/pom.xml

@@ -40,5 +40,6 @@
 		<module>user-classroom</module>
 		<module>user-admin</module>
 		<module>user-biz</module>
-	</modules>
+        <module>user-website</module>
+    </modules>
 </project>

+ 0 - 1
cooleshow-user/user-teacher/pom.xml

@@ -17,7 +17,6 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
     <dependencies>
-
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

+ 78 - 0
cooleshow-user/user-website/pom.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.yonge.cooleshow</groupId>
+        <artifactId>cooleshow-user</artifactId>
+        <version>1.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.yonge.cooleshow</groupId>
+    <artifactId>user-website</artifactId>
+    <version>1.0</version>
+    <name>user-website</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-security</artifactId>
+        </dependency>
+
+        <!-- swagger-spring-boot -->
+        <dependency>
+            <groupId>com.spring4all</groupId>
+            <artifactId>swagger-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>audit-log</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>thirdparty-component</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.cooleshow</groupId>
+            <artifactId>user-biz</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.whvcse</groupId>
+            <artifactId>easy-captcha</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 29 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/WebsiteApplication.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.website;
+
+import com.spring4all.swagger.EnableSwagger2Doc;
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/3/15 15:19
+ */
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients("com.yonge.cooleshow")
+@MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
+@ComponentScan(basePackages = {"com.yonge.cooleshow","com.yonge.toolset"})
+@Configuration
+@EnableSwagger2Doc
+public class WebsiteApplication {
+    public static void main(String[] args) {
+        BaseApplication.run(AppConstant.APPLICATION_WEBSITE, WebsiteApplication.class, args);
+    }
+
+}

+ 44 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/config/ResourceServerConfig.java

@@ -0,0 +1,44 @@
+package com.yonge.cooleshow.website.config;
+
+import com.yonge.cooleshow.common.security.BaseAccessDeniedHandler;
+import com.yonge.cooleshow.common.security.BaseAuthenticationEntryPoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+
+@Configuration
+@EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+    @Autowired
+    private BaseAccessDeniedHandler baseAccessDeniedHandler;
+
+    @Autowired
+    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.csrf()
+                .disable()
+                .exceptionHandling()
+                .accessDeniedHandler(baseAccessDeniedHandler)
+                .authenticationEntryPoint(baseAuthenticationEntryPoint)
+                .and()
+                .authorizeRequests()
+                .antMatchers("/task/*").hasIpAddress("0.0.0.0/0")
+                .antMatchers("/v2/api-docs", "/code/*",
+                        "/liveRoom/test", "/liveRoom/syncUserStatus", "/courseGroup/getLockCache", "/open/**")
+                .permitAll().anyRequest().authenticated().and().httpBasic();
+    }
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
+    }
+
+}

+ 54 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/config/WebMvcConfig.java

@@ -0,0 +1,54 @@
+package com.yonge.cooleshow.website.config;
+
+import com.yonge.cooleshow.biz.dal.config.LocalFastJsonHttpMessageConverter;
+import com.yonge.cooleshow.common.config.EnumConverterFactory;
+import com.yonge.cooleshow.website.interceptor.MDCInterceptor;
+import com.yonge.cooleshow.website.interceptor.OperationLogInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.format.FormatterRegistry;
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+	@Autowired
+	private MDCInterceptor mdcInterceptor;
+
+	@Autowired
+	private OperationLogInterceptor operationLogInterceptor;
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		List<String> includePathPatterns = new ArrayList<String>();
+		includePathPatterns.add("/**");
+		List<String> excludePathPatterns = new ArrayList<String>();
+		excludePathPatterns.add("/login");
+		registry.addInterceptor(mdcInterceptor).addPathPatterns(includePathPatterns).excludePathPatterns(excludePathPatterns);
+	}
+
+	/**
+	 * 枚举类的转换器 addConverterFactory
+	 */
+	@Override
+	public void addFormatters(FormatterRegistry registry) {
+		registry.addConverterFactory(new EnumConverterFactory());
+	}
+	
+	@Bean
+    public HttpMessageConverters fastJsonHttpMessageConverters(){
+		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
+        List<MediaType> fastMediaTypes =  new ArrayList<MediaType>();
+        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
+        converter.setSupportedMediaTypes(fastMediaTypes);
+        return new HttpMessageConverters(converter);
+    }
+
+}

+ 41 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/interceptor/MDCInterceptor.java

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.website.interceptor;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.toolset.utils.web.WebUtil;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+public class MDCInterceptor extends HandlerInterceptorAdapter {
+
+	private static final String IP = "ip";
+
+	private static final String USERNAME = "username";
+	
+	@Autowired
+	@Lazy
+	private SysUserFeignService sysUserFeignService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser != null && sysUser.getId() != null) {
+			// 存储userId以及IP
+			MDC.put(USERNAME, sysUser.getUsername() + "@" + sysUser.getId());
+		}
+		MDC.put(IP, WebUtil.getRemoteIp(request));
+
+		return true;
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+	}
+}

+ 31 - 0
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/interceptor/OperationLogInterceptor.java

@@ -0,0 +1,31 @@
+package com.yonge.cooleshow.website.interceptor;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.toolset.log.interceptor.AuditLogInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+public class OperationLogInterceptor extends AuditLogInterceptor {
+
+	@Autowired
+	@Lazy
+	private SysUserFeignService sysUserFeignService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser != null && sysUser.getId() != null) {
+			setUsername(sysUser.getRealName(),sysUser.getId());
+		}
+		return true;
+	}
+
+}

+ 12 - 0
cooleshow-user/user-website/src/main/resources/bootstrap-prod.yml

@@ -0,0 +1,12 @@
+spring:
+  cloud:
+    nacos:
+      config:
+        server-addr: 47.114.1.200:8848
+        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        group: DEFAULT_GROUP
+        prefix: website
+        file-extension: yaml
+        refresh:
+          enabled: true
+        enabled: true