Compare commits

...

18 Commits

@ -2,11 +2,14 @@
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="internal-common" />
<module name="api-passenger" />
<module name="service-passenger-user" />
<module name="service-verificationcode" />
</profile>
</annotationProcessing>
@ -14,6 +17,8 @@
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="api-passenger" options="-parameters" />
<module name="internal-common" options="-parameters" />
<module name="service-passenger-user" options="-parameters" />
<module name="service-verificationcode" options="-parameters" />
</option>
</component>

@ -2,7 +2,10 @@
<project version="4">
<component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
<file url="file://$PROJECT_DIR$/api-passenger/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/internal-common/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-passenger-user/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-verificationcode/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/service-verificationcode/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/demo/demo.iml" filepath="$PROJECT_DIR$/demo/demo.iml" />
</modules>
</component>
</project>

@ -21,6 +21,28 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.mashibing</groupId>
<artifactId>internal-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

@ -3,11 +3,13 @@ package com.mashibing.apipassenger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ApiPassengerApplication {
//log
public static void main(String[] args) {
SpringApplication.run(ApiPassengerApplication.class);
}

@ -1,6 +1,7 @@
package com.mashibing.apipassenger.controller;
import com.mashibing.apipassenger.request.VerificationCodeDTO;
import com.mashibing.common.dto.ResponseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@ -10,7 +11,24 @@ public class TestController {
@GetMapping("/test")
public String test(){
//
return "test api passenger.";
}
/**
* token
* @return
*/
@GetMapping("/authTest")
public ResponseResult authTest(){
return ResponseResult.success("auth test!");
}
/**
* token
* @return
*/
@GetMapping("/noAuthTest")
public ResponseResult noAuthTest(){
return ResponseResult.success("no auth test!");
}
}

@ -0,0 +1,23 @@
package com.mashibing.apipassenger.controller;
import com.mashibing.apipassenger.service.TokenService;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.response.TokenResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TokenController {
@Autowired
private TokenService tokenService;
@PostMapping("/token-refresh")
public ResponseResult refreshToken(@RequestBody TokenResponse tokenResponse){
String refreshToken = tokenResponse.getRefreshToken();
System.out.println("接收的refreshToken:" + refreshToken);
return tokenService.refreshToken(refreshToken);
}
}

@ -0,0 +1,25 @@
package com.mashibing.apipassenger.controller;
import com.mashibing.apipassenger.service.UserService;
import com.mashibing.common.dto.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public ResponseResult getUser(HttpServletRequest request){
String token = request.getHeader("Authorization");
return userService.getUserByToken(token);
}
}

@ -2,8 +2,10 @@ package com.mashibing.apipassenger.controller;
import com.mashibing.apipassenger.request.VerificationCodeDTO;
import com.mashibing.apipassenger.service.VerificationCodeService;
import com.mashibing.common.dto.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@ -13,12 +15,22 @@ public class VerificationCodeController {
private VerificationCodeService verificationCodeService;
@GetMapping("verification-code")
public String verificateCode(@RequestBody VerificationCodeDTO verificationCodeDTO){
public ResponseResult verificateCode(@RequestBody VerificationCodeDTO verificationCodeDTO){
String passengerPhone = verificationCodeDTO.getPassengerPhone();
System.out.println("接收到的参数:" + passengerPhone);
//调用短信验证码服务并存储到Redis
return verificationCodeService.generatorCode(passengerPhone);
}
@PostMapping("/verification-code-check")
public ResponseResult checkVerificationCode(@RequestBody VerificationCodeDTO verificationCodeDTO){
String verificationCode = verificationCodeDTO.getVerificationCode();
String passengerPhone = verificationCodeDTO.getPassengerPhone();
System.out.println("verificationCode:" + verificationCode + ",passengerPhone:" + passengerPhone);
return verificationCodeService.checkCode(passengerPhone,verificationCode);
}
}

@ -0,0 +1,26 @@
package com.mashibing.apipassenger.interceptor;
import com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Bean
public JwtInterceptor jwtInterceptor(){
return new JwtInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// /**拦截的更多,子目录也拦截
// registry.addInterceptor(new JwtInterceptor()) 这个会导致拦截器初始化时没有初始化redisTemplate,所以要提前new
registry.addInterceptor(jwtInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/token-refresh")
.excludePathPatterns("/noAuthTest")
.excludePathPatterns("/verification-code")
.excludePathPatterns("/verification-code-check");//这里注意post还是get
}
}

@ -0,0 +1,58 @@
package com.mashibing.apipassenger.interceptor;
import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.mashibing.common.constant.TokenConstants;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.dto.TokenResult;
import com.mashibing.common.util.JwtUtils;
import com.mashibing.common.util.RedisPrefixUtils;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.Result;
import java.io.PrintWriter;
public class JwtInterceptor implements HandlerInterceptor {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
boolean result = true;
String resutltString = "";
String token = request.getHeader("Authorization");
// 解析token
TokenResult tokenResult = JwtUtils.checkToken(token);
if (tokenResult == null){
resutltString = "access token invalid interceptor.";
result = false;
}else{
// 拼接key
String phone = tokenResult.getPhone();
String identity = tokenResult.getIdentity();
String tokenKey = RedisPrefixUtils.generateTokenKey(phone,identity, TokenConstants.ACCESS_TOKEN_TYPE);
// 从redis中取出token
String tokenRedis = stringRedisTemplate.opsForValue().get(tokenKey);
if ((StringUtils.isBlank(tokenRedis)) || (!token.trim().equals(tokenRedis.trim()))){
resutltString = "access token invalid";
result = false;
}
}
if (!result){//输出到前台页面数据
PrintWriter out = response.getWriter();
out.print(JSONObject.fromObject(ResponseResult.fail(resutltString)).toString());
}
return result;
}
}

@ -0,0 +1,19 @@
package com.mashibing.apipassenger.remote;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.request.VerificationCodeDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient("service-passenger-user")
public interface ServicePassengerUserClient {
@PostMapping("/user")
public ResponseResult loginOrRegister(@RequestBody VerificationCodeDTO verificationCodeDTO);
@GetMapping("/user/{phone}")
public ResponseResult getUserByPhone(@PathVariable("phone") String phone);
}

@ -0,0 +1,13 @@
package com.mashibing.apipassenger.remote;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.response.NumberCodeResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("service-verificationcode")
public interface ServiceVefificationcodeClient {
@GetMapping("/numberCode/{size}")
ResponseResult<NumberCodeResponse> getNumberCode(@PathVariable("size") int size);
}

@ -1,16 +1,10 @@
package com.mashibing.apipassenger.request;
import lombok.Data;
@Data
public class VerificationCodeDTO {
private String passengerPhone;
public String getPassengerPhone() {
return passengerPhone;
}
public void setPassengerPhone(String passengerPhone) {
this.passengerPhone = passengerPhone;
}
private String verificationCode;
}

@ -0,0 +1,54 @@
package com.mashibing.apipassenger.service;
import com.mashibing.common.constant.CommonStatusEnum;
import com.mashibing.common.constant.TokenConstants;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.dto.TokenResult;
import com.mashibing.common.response.TokenResponse;
import com.mashibing.common.util.JwtUtils;
import com.mashibing.common.util.RedisPrefixUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class TokenService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
public ResponseResult refreshToken(String refreshToken){
//解析refreshToken
TokenResult tokenResult = JwtUtils.checkToken(refreshToken);
if(tokenResult == null){
return ResponseResult.fail(CommonStatusEnum.TOKEN_ERROR.getCode(),CommonStatusEnum.TOKEN_ERROR.getMsg());
}
//读取Redis Token
String phone = tokenResult.getPhone();
String identity = tokenResult.getIdentity();
String tokenKey = RedisPrefixUtils.generateTokenKey(phone,identity, TokenConstants.REFRESH_TOKEN_TYPE);
String redisAccessToken = stringRedisTemplate.opsForValue().get(tokenKey);
//验证refreshToken
if(StringUtils.isBlank(redisAccessToken) || !redisAccessToken.trim().equals(refreshToken.trim())){
String message = "refreshtoken is invalid!";
return ResponseResult.fail(CommonStatusEnum.TOKEN_ERROR.getCode(), CommonStatusEnum.TOKEN_ERROR.getMsg());
}
//重新生成双token
String newAccessToken = JwtUtils.generateToken(phone, identity, TokenConstants.ACCESS_TOKEN_TYPE);
String newRefreshToken = JwtUtils.generateToken(phone, identity, TokenConstants.ACCESS_TOKEN_TYPE);
String accessTokenKey = RedisPrefixUtils.generateTokenKey(phone,identity,TokenConstants.ACCESS_TOKEN_TYPE);
stringRedisTemplate.opsForValue().set(accessTokenKey,newAccessToken,30, TimeUnit.DAYS);
stringRedisTemplate.opsForValue().set(tokenKey,newRefreshToken,31,TimeUnit.DAYS);
TokenResponse tokenResponse = new TokenResponse();
tokenResponse.setRefreshToken(newRefreshToken);
tokenResponse.setAccessToken(newAccessToken);
return ResponseResult.success(tokenResponse);
}
}

@ -0,0 +1,32 @@
package com.mashibing.apipassenger.service;
import com.mashibing.apipassenger.remote.ServicePassengerUserClient;
import com.mashibing.common.dto.PassengerUser;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.dto.TokenResult;
import com.mashibing.common.request.VerificationCodeDTO;
import com.mashibing.common.util.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class UserService {
@Autowired
private ServicePassengerUserClient servicePassengerUserClient;
public ResponseResult getUserByToken(String token){
//校验token
log.info("userService--token:" + token);
//根据手机号获取用户信息
TokenResult tokenResult = JwtUtils.checkToken(token);
String phone = tokenResult.getPhone();
log.info("手机号: " + phone);
ResponseResult userByPhone = servicePassengerUserClient.getUserByPhone(phone);
return ResponseResult.success(userByPhone.getData());
}
}

@ -1,37 +1,101 @@
package com.mashibing.apipassenger.service;
import com.mashibing.apipassenger.remote.ServicePassengerUserClient;
import com.mashibing.apipassenger.remote.ServiceVefificationcodeClient;
import com.mashibing.common.constant.CommonStatusEnum;
import com.mashibing.common.constant.IdentityConstant;
import com.mashibing.common.constant.TokenConstants;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.request.VerificationCodeDTO;
import com.mashibing.common.response.NumberCodeResponse;
import com.mashibing.common.response.TokenResponse;
import com.mashibing.common.util.JwtUtils;
import com.mashibing.common.util.RedisPrefixUtils;
import jdk.nashorn.internal.parser.TokenType;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.sql.SQLOutput;
import java.util.concurrent.TimeUnit;
@Service
public class VerificationCodeService {
@Autowired
private ServiceVefificationcodeClient serviceVefificationcodeClient;
@Autowired
private ServicePassengerUserClient servicePassengerUserClient;
@Autowired
private StringRedisTemplate stringRedisTemplate;
public String generatorCode(String passengerPhone){
/**
*
* @param passengerPhone
* @return ResponseResult
*/
public ResponseResult generatorCode(String passengerPhone){
//调用验证码服务,获取验证码
System.out.println("调用验证码服务,获取验证码");
String code = "111111";
ResponseResult<NumberCodeResponse> responseResult = serviceVefificationcodeClient.getNumberCode(6);
int numberCode = responseResult.getData().getNumberCode();
System.out.println("接收到的numberCode:" + numberCode);
//存入redis
System.out.println("存入redis");
String key = RedisPrefixUtils.generateKeyByCode(passengerPhone);
stringRedisTemplate.opsForValue().set(key, "" + numberCode,2, TimeUnit.MINUTES);
JSONObject jsonObject = new JSONObject();
jsonObject.put("code",1);
jsonObject.put("message","success");
return jsonObject.toString();
//发送短信。。。
return ResponseResult.success("");
}
/**
*
* @param passengerPhone
* @param verificationCode
* @return ResponseResult
*/
public ResponseResult checkCode(String passengerPhone, String verificationCode) {
System.out.println("根据手机号和验证码查询redis");
String key = RedisPrefixUtils.generateKeyByCode(passengerPhone);
String codeRedis = stringRedisTemplate.opsForValue().get(key);
System.out.println("code in redis:" + codeRedis);
System.out.println("校验验证码");
if(StringUtils.isBlank(codeRedis)){
return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_FAIL.getCode(),CommonStatusEnum.VERIFICATION_CODE_FAIL.getMsg());
}
if(!verificationCode.trim().equals(codeRedis.trim())){
return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_FAIL.getCode(),CommonStatusEnum.VERIFICATION_CODE_FAIL.getMsg());
}
System.out.println("判断是否有用户,没有则新增用户");
VerificationCodeDTO verificationCodeDTO = new VerificationCodeDTO();
verificationCodeDTO.setPassengerPhone(passengerPhone);
servicePassengerUserClient.loginOrRegister(verificationCodeDTO);
System.out.println("颁发token");
String accessToken = JwtUtils.generateToken(passengerPhone, IdentityConstant.PASSENGER_IDENTITY, TokenConstants.ACCESS_TOKEN_TYPE);
String refreshToken = JwtUtils.generateToken(passengerPhone, IdentityConstant.PASSENGER_IDENTITY, TokenConstants.REFRESH_TOKEN_TYPE);
//token存入Redis
String accessTokenRedisKey = RedisPrefixUtils.generateTokenKey(passengerPhone, IdentityConstant.PASSENGER_IDENTITY, TokenConstants.ACCESS_TOKEN_TYPE);
String refreshTokenRedisKey = RedisPrefixUtils.generateTokenKey(passengerPhone, IdentityConstant.PASSENGER_IDENTITY, TokenConstants.REFRESH_TOKEN_TYPE);
stringRedisTemplate.opsForValue().set(accessTokenRedisKey, accessToken, 30,TimeUnit.DAYS);
stringRedisTemplate.opsForValue().set(refreshTokenRedisKey, refreshToken, 31,TimeUnit.DAYS);
TokenResponse tokenResponse = new TokenResponse();
tokenResponse.setAccessToken(accessToken);
tokenResponse.setRefreshToken(refreshToken);
return ResponseResult.success(tokenResponse);
}
}

@ -7,4 +7,8 @@ spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server-addr: 127.0.0.1:8848
redis:
port: 6379
host: 192.168.1.10
database: 0

@ -7,4 +7,8 @@ spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server-addr: 127.0.0.1:8848
redis:
port: 6379
host: 192.168.1.10
database: 0

@ -1,5 +1,13 @@
com\mashibing\apipassenger\request\VerificationCodeDTO.class
com\mashibing\apipassenger\ApiPassengerApplication.class
com\mashibing\apipassenger\controller\TestController.class
com\mashibing\apipassenger\service\VerificationCodeService.class
com\mashibing\apipassenger\controller\VerificationCodeController.class
com\mashibing\apipassenger\remote\ServiceVefificationcodeClient.class
com\mashibing\apipassenger\service\TokenService.class
com\mashibing\apipassenger\interceptor\InterceptorConfig.class
com\mashibing\apipassenger\interceptor\JwtInterceptor.class
com\mashibing\apipassenger\controller\UserController.class
com\mashibing\apipassenger\request\VerificationCodeDTO.class
com\mashibing\apipassenger\service\VerificationCodeService.class
com\mashibing\apipassenger\service\UserService.class
com\mashibing\apipassenger\remote\ServicePassengerUserClient.class
com\mashibing\apipassenger\controller\TokenController.class

@ -1,5 +1,13 @@
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\controller\VerificationCodeController.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\request\VerificationCodeDTO.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\service\VerificationCodeService.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\remote\ServicePassengerUserClient.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\controller\TokenController.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\ApiPassengerApplication.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\controller\VerificationCodeController.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\request\VerificationCodeDTO.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\interceptor\InterceptorConfig.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\service\TokenService.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\interceptor\JwtInterceptor.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\service\UserService.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\controller\UserController.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\controller\TestController.java
D:\Works\workspaces\online-taxi-public\api-passenger\src\main\java\com\mashibing\apipassenger\remote\ServiceVefificationcodeClient.java

@ -0,0 +1,16 @@
<?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>
<artifactId>online-taxi-public</artifactId>
<groupId>org.mashibing</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>internal-common</artifactId>
</project>

@ -0,0 +1,42 @@
package com.mashibing.common.constant;
import lombok.Data;
import lombok.Getter;
public enum CommonStatusEnum {
/**
*
*/
VERIFICATION_CODE_FAIL(1001,"验证码错误!"),
/**
* token1100 ~ 1199
*/
TOKEN_ERROR(1100,"token错误"),
/**
* user error 1200 ~ 1299
*/
USER_NOT_EXIST(1200,"当前用户不存在"),
/**
*
*/
SUCCESS(1,"success"),
/**
*
*/
FAIL(0,"fail");
@Getter
private int code;
@Getter
private String msg;
CommonStatusEnum(int code,String msg){
this.code = code;
this.msg = msg;
}
}

@ -0,0 +1,6 @@
package com.mashibing.common.constant;
public class IdentityConstant {
public static final String PASSENGER_IDENTITY = "1";
public static final String DRIVER_IDENTITY = "2";
}

@ -0,0 +1,11 @@
package com.mashibing.common.constant;
/**
* token
*/
public class TokenConstants {
public static final String ACCESS_TOKEN_TYPE = "accessToken";
public static final String REFRESH_TOKEN_TYPE = "refreshToken";
}

@ -0,0 +1,20 @@
package com.mashibing.common.dto;
import lombok.Data;
import java.beans.Transient;
import java.time.LocalDateTime;
@Data
public class PassengerUser {
private Long id;
private String passengerPhone;//不是passenger_phonemysql 这里要注意啦!!!
private String passengerName;
private byte passengerGender;
private byte state;
private LocalDateTime gmtCreate;
private LocalDateTime gmtUpdate;
private String profilePhoto;
}

@ -0,0 +1,67 @@
package com.mashibing.common.dto;
import com.mashibing.common.constant.CommonStatusEnum;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class ResponseResult<T> {
private int code;
private String message;
private T data;
/**
*
* @param <T>
* @return
*/
public static <T> ResponseResult success(){
return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode())
.setMessage(CommonStatusEnum.SUCCESS.getMsg());
}
/**
*
* @param data
* @param <T>
* @return
*/
public static <T> ResponseResult success(T data){
return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode())
.setMessage(CommonStatusEnum.SUCCESS.getMsg()).setData(data);
}
/**
*:
* @param data
* @return
*/
public static ResponseResult fail(String data){
return new ResponseResult().setData(data);
}
/**
* :
* @param code
* @param msg
* @return
*/
public static ResponseResult fail(int code, String msg){
return new ResponseResult().setCode(code).setMessage(msg);
}
/**
*:
* @param code
* @param msg
* @param data
* @return
*/
public static ResponseResult fail(int code, String msg, String data){
return new ResponseResult().setCode(code).setMessage(msg).setData(data);
}
}

@ -0,0 +1,10 @@
package com.mashibing.common.dto;
import lombok.Data;
@Data
public class TokenResult {
private String phone;
private String identity;
private String tokenType;
}

@ -0,0 +1,10 @@
package com.mashibing.common.request;
import lombok.Data;
@Data
public class VerificationCodeDTO {
private String passengerPhone;
private String verificationCode;
}

@ -0,0 +1,8 @@
package com.mashibing.common.response;
import lombok.Data;
@Data
public class NumberCodeResponse {
private int numberCode;
}

@ -0,0 +1,9 @@
package com.mashibing.common.response;
import lombok.Data;
@Data
public class TokenResponse {
private String accessToken;
private String refreshToken;
}

@ -0,0 +1,80 @@
package com.mashibing.common.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.mashibing.common.constant.TokenConstants;
import com.mashibing.common.dto.TokenResult;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JwtUtils {
//加盐
private static final String SIGN = "CPFmsb!@#$$";
private static final String JWT_KEY_PHONE = "phone";
//乘客是1司机是2
private static final String JWT_KET_IDENTITY = "identity";
private static final String JWT_KET_TOKEN_TYPE = "tokenType";
private static final String JWT_KET_TOKEN_TIME = "tokenTime";
public static String generateToken(String phone, String identity, String tokenType){
Map<String,String> map = new HashMap<String, String>();
map.put(JwtUtils.JWT_KEY_PHONE,phone);
map.put(JwtUtils.JWT_KET_IDENTITY,identity);
map.put(JwtUtils.JWT_KET_TOKEN_TYPE,tokenType);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE,1);
Date date = calendar.getTime();
map.put(JwtUtils.JWT_KET_TOKEN_TIME,date.toString());
JWTCreator.Builder builder = JWT.create();
map.forEach((k,v) -> {
builder.withClaim(k,v);
});
// builder.withExpiresAt(date);
String token = builder.sign(Algorithm.HMAC256(SIGN));
return token;
}
public static TokenResult parseToken(String token){
DecodedJWT decodedJWT = JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);
String phone = decodedJWT.getClaim(JwtUtils.JWT_KEY_PHONE).asString();//不能写toString会多带“”双引号
String identity = decodedJWT.getClaim(JwtUtils.JWT_KET_IDENTITY).asString();
String tokenType = decodedJWT.getClaim(JwtUtils.JWT_KET_TOKEN_TYPE).asString();
TokenResult tokenResult = new TokenResult();
tokenResult.setTokenType(tokenType);
tokenResult.setIdentity(identity);
tokenResult.setPhone(phone);
return tokenResult;
}
/**
* token
* @param token
* @return TokenResult
*/
public static TokenResult checkToken(String token){
TokenResult tokenResult = null;
try {
tokenResult = JwtUtils.parseToken(token);
}catch (Exception e){
tokenResult = null;
}
return tokenResult;
}
public static void main(String[] args) {
String token = JwtUtils.generateToken("18626772944","1", TokenConstants.ACCESS_TOKEN_TYPE);
System.out.println("token:" + token);
TokenResult result = JwtUtils.parseToken(token);
System.out.println("phone parsed:" + result.toString());
}
}

@ -0,0 +1,14 @@
package com.mashibing.common.util;
public class RedisPrefixUtils {
private static String verificationCodePrefix = "verification-code-";
private static String tokenKeyPrefix = "token-";
public static String generateKeyByCode(String passengerPhone){
return verificationCodePrefix + passengerPhone;
}
public static String generateTokenKey(String phone,String identity, String tokenType){
return tokenKeyPrefix + phone + "-" + identity + "-" + tokenType;
}
}

@ -1,3 +1,3 @@
artifactId=api-passenger
artifactId=internal-common
groupId=org.mashibing
version=1.0-SNAPSHOT

@ -0,0 +1,11 @@
com\mashibing\common\dto\ResponseResult.class
com\mashibing\common\constant\CommonStatusEnum.class
com\mashibing\common\dto\PassengerUser.class
com\mashibing\common\response\NumberCodeResponse.class
com\mashibing\common\util\RedisPrefixUtils.class
com\mashibing\common\util\JwtUtils.class
com\mashibing\common\constant\IdentityConstant.class
com\mashibing\common\request\VerificationCodeDTO.class
com\mashibing\common\dto\TokenResult.class
com\mashibing\common\response\TokenResponse.class
com\mashibing\common\constant\TokenConstants.class

@ -0,0 +1,11 @@
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\constant\IdentityConstant.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\constant\CommonStatusEnum.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\dto\ResponseResult.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\response\NumberCodeResponse.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\constant\TokenConstants.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\request\VerificationCodeDTO.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\response\TokenResponse.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\dto\PassengerUser.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\util\JwtUtils.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\util\RedisPrefixUtils.java
D:\Works\workspaces\online-taxi-public\internal-common\src\main\java\com\mashibing\common\dto\TokenResult.java

@ -17,6 +17,8 @@
<modules>
<module>api-passenger</module>
<module>service-verificationcode</module>
<module>internal-common</module>
<module>service-passenger-user</module>
</modules>
<packaging>pom</packaging>
@ -34,19 +36,45 @@
<classifier>jdk15</classifier>
</dependency>
<!-- nacos 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.14.0</version>
</dependency>
<!-- nacos 依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
</dependency>-->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

@ -0,0 +1,48 @@
<?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>
<artifactId>online-taxi-public</artifactId>
<groupId>org.mashibing</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service-passenger-user</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mashibing</groupId>
<artifactId>internal-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>

@ -0,0 +1,15 @@
package com.mashibing.serviceDriverUser;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.mashibing.serviceDriverUser.mapper")
public class ServicePassengerUserApplication {
public static void main(String[] args) {
SpringApplication.run(ServicePassengerUserApplication.class);
}
}

@ -0,0 +1,12 @@
package com.mashibing.serviceDriverUser.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping
public String test(){
return "service-passenger-user";
}
}

@ -0,0 +1,26 @@
package com.mashibing.serviceDriverUser.controller;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.request.VerificationCodeDTO;
import com.mashibing.serviceDriverUser.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/user")
public ResponseResult loginOrRegister(@RequestBody VerificationCodeDTO verificationCodeDTO){
String passengerPhone = verificationCodeDTO.getPassengerPhone();
System.out.println("passengerPhone:" + passengerPhone);
return userService.loginOrRegister(passengerPhone);
}
@GetMapping("/user/{phone}")
public ResponseResult getUserByPhone(@PathVariable("phone") String phone){
System.out.println("passengerPhone:" + phone);
return userService.getUserByPhone(phone);
}
}

@ -0,0 +1,10 @@
package com.mashibing.serviceDriverUser.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mashibing.common.dto.PassengerUser;
import org.springframework.stereotype.Repository;
@Repository
public interface PassengerUserMapper extends BaseMapper<PassengerUser> {
}

@ -0,0 +1,66 @@
package com.mashibing.serviceDriverUser.service;
import com.mashibing.common.constant.CommonStatusEnum;
import com.mashibing.common.dto.PassengerUser;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.serviceDriverUser.mapper.PassengerUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
@Service
public class UserService {
@Autowired
private PassengerUserMapper passengerUserMapper;
public ResponseResult loginOrRegister(String passengerPhone){
System.out.println("user service");
//根据手机号查询用户信息
HashMap map = new HashMap();
map.put("passenger_phone",passengerPhone);
List<PassengerUser> user = this.passengerUserMapper.selectByMap(map);
System.out.println(user.size() == 0?"无记录":user.get(0).getPassengerPhone() + user.get(0).getPassengerName());
//若没有用户,插入用户
if(user.size() == 0){
PassengerUser newUser = new PassengerUser();
newUser.setPassengerName("xxoo");
newUser.setPassengerGender((byte)0);
newUser.setPassengerPhone(passengerPhone);
newUser.setState((byte) 0);
LocalDateTime now = LocalDateTime.now();
newUser.setGmtCreate(now);
newUser.setGmtUpdate(now);
this.passengerUserMapper.insert(newUser);
}
return ResponseResult.success();
}
/**
*
* @param passengerPhone
* @return ResponseResult
*/
public ResponseResult getUserByPhone(String passengerPhone){
//根据手机号查询用户信息
HashMap map = new HashMap();
map.put("passenger_phone",passengerPhone);
List<PassengerUser> user = this.passengerUserMapper.selectByMap(map);
if(user.size() == 0){
return ResponseResult.fail(CommonStatusEnum.USER_NOT_EXIST.getCode(), CommonStatusEnum.USER_NOT_EXIST.getMsg());
}else{
PassengerUser passengerUser = user.get(0);
return ResponseResult.success(passengerUser);
}
}
}

@ -0,0 +1,18 @@
server:
port: 8083
spring:
application:
name: service-passenger-user
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/service-passenger-user?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: admin
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848

@ -0,0 +1,18 @@
server:
port: 8083
spring:
application:
name: service-passenger-user
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/service-passenger-user?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: admin
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848

@ -0,0 +1,5 @@
com\mashibing\serviceDriverUser\mapper\PassengerUserMapper.class
com\mashibing\serviceDriverUser\service\UserService.class
com\mashibing\serviceDriverUser\controller\TestController.class
com\mashibing\serviceDriverUser\controller\UserController.class
com\mashibing\serviceDriverUser\ServicePassengerUserApplication.class

@ -0,0 +1,5 @@
D:\Works\workspaces\online-taxi-public\service-passenger-user\src\main\java\com\mashibing\serviceDriverUser\controller\UserController.java
D:\Works\workspaces\online-taxi-public\service-passenger-user\src\main\java\com\mashibing\serviceDriverUser\ServicePassengerUserApplication.java
D:\Works\workspaces\online-taxi-public\service-passenger-user\src\main\java\com\mashibing\serviceDriverUser\controller\TestController.java
D:\Works\workspaces\online-taxi-public\service-passenger-user\src\main\java\com\mashibing\serviceDriverUser\mapper\PassengerUserMapper.java
D:\Works\workspaces\online-taxi-public\service-passenger-user\src\main\java\com\mashibing\serviceDriverUser\service\UserService.java

@ -1,33 +0,0 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

@ -1,2 +0,0 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

@ -1,316 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`\\unset -f command; \\command -v java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

@ -1,188 +0,0 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %WRAPPER_JAR% ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%"=="on" pause
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
cmd /C exit /B %ERROR_CODE%

@ -7,14 +7,16 @@
<groupId>org.mashibing</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.mashibing</groupId>
<artifactId>service-verificationcode</artifactId>
<version>1.0-SNAPSHOT</version>
<name>service-verificationcode</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
@ -26,15 +28,17 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.mashibing</groupId>
<artifactId>internal-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,36 @@
package com.mashibing.service.controller;
import com.mashibing.common.dto.ResponseResult;
import com.mashibing.common.response.NumberCodeResponse;
import net.sf.json.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import static java.lang.Math.pow;
@RestController
public class NumberCodeController {
@GetMapping("/numberCode/{size}")
public ResponseResult getNumberCode(@PathVariable("size") int size){
System.out.println("size:" + size);
//获取随机数
double mathRandom = (Math.random() * 9 + 1) * pow(10, size-1);
int resultInt = (int) mathRandom;
System.out.println("generate numberCode:" + resultInt);
NumberCodeResponse response = new NumberCodeResponse();
response.setNumberCode(resultInt);
/*
JSONObject result = new JSONObject();
result.put("code",1);
result.put("message","success");
JSONObject data = new JSONObject();
data.put("numberCode",resultInt);
result.put("data",data);
*/
return ResponseResult.success(response);
}
}

@ -0,0 +1,10 @@
server:
port: 8082
spring:
application:
name: service-verificationcode
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848

@ -0,0 +1,3 @@
com\mashibing\service\controller\NumberCodeController.class
com\mashibing\service\ServiceVerificationcodeApplication.class
com\mashibing\service\controller\TestController.class

@ -0,0 +1,3 @@
D:\Works\workspaces\online-taxi-public\service-verificationcode\src\main\java\com\mashibing\service\controller\TestController.java
D:\Works\workspaces\online-taxi-public\service-verificationcode\src\main\java\com\mashibing\service\ServiceVerificationcodeApplication.java
D:\Works\workspaces\online-taxi-public\service-verificationcode\src\main\java\com\mashibing\service\controller\NumberCodeController.java
Loading…
Cancel
Save