Merge pull request 'add_swagger_for_user' (#5) from add_swagger_for_user into main

Reviewed-on: https://go.indie.cn/git/queyue-backend/luoo_parent/pulls/5
main
foo 11 months ago
commit 042d02ecb4

@ -44,14 +44,14 @@ public class ResultVO<T>{
public void setMessage(String message) { public void setMessage(String message) {
this.message = message; this.message = message;
} }
public Object getData() { public T getData() {
return data; return data;
} }
public void setData(T data) { public void setData(T data) {
this.data = data; this.data = data;
} }
public static <E> ResultVO<E> success(E data){ public static <T> ResultVO<T> success(T data){
return new ResultVO<>(true,200,"操作成功", data); return new ResultVO<>(true,200,"操作成功", data);
} }

@ -56,6 +56,27 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> <artifactId>spring-boot-starter-actuator</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>com.apifan.common</groupId>
<artifactId>common-random</artifactId>
<version>1.0.21</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>app</finalName> <finalName>app</finalName>

@ -1,18 +1,40 @@
package com.luoo.user; package com.luoo.user;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import util.IdWorker; import util.IdWorker;
import util.JwtUtil; import util.JwtUtil;
@SpringBootApplication @SpringBootApplication
@EnableEurekaClient @EnableEurekaClient
@EnableJpaAuditing
public class UserApplication { public class UserApplication {
static Logger logger= LoggerFactory.getLogger(UserApplication.class);
public static void main(String[] args) { public static void main(String[] args) throws UnknownHostException {
SpringApplication.run(UserApplication.class, args); ConfigurableApplicationContext application=SpringApplication.run(UserApplication.class, args);
Environment env = application.getEnvironment();
logger.info("\n----------------------------------------------------------\n\t" +
"Application '{}' is running! Access URLs:\n\t" +
"Local: \t\thttp://localhost:{}\n\t" +
"External: \thttp://{}:{}\n\t"+
"Doc: \thttp://{}:{}/doc.html\n"+
"----------------------------------------------------------",
env.getProperty("spring.application.name"),
env.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
env.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
env.getProperty("server.port"));
} }
@Bean @Bean

@ -4,6 +4,7 @@ import com.luoo.user.interceptor.JwtInterceptor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration @Configuration
@ -12,8 +13,19 @@ public class InterceptorConfig extends WebMvcConfigurationSupport {
@Autowired @Autowired
private JwtInterceptor jwtInterceptor; private JwtInterceptor jwtInterceptor;
protected void addInterceptors(InterceptorRegistry registry) { protected void addInterceptors(InterceptorRegistry registry) {
String[] excludePathPatterns = { "/user/login/**","/user/appLogin/**","/user/sendsms/**","/doc.html/**","/swagger-resources/**","/webjars/**","/v2/**"};
registry.addInterceptor(jwtInterceptor). registry.addInterceptor(jwtInterceptor).
addPathPatterns("/**"). addPathPatterns("/**").
excludePathPatterns("/**/login/**"); excludePathPatterns(excludePathPatterns);
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
} }
} }

@ -16,10 +16,14 @@ import org.springframework.web.bind.annotation.RestController;
import com.luoo.user.pojo.User; import com.luoo.user.pojo.User;
import com.luoo.user.service.UserService; import com.luoo.user.service.UserService;
import com.luoo.user.vo.UserVO;
import entity.PageResult; import entity.PageResult;
import entity.Result; import entity.Result;
import entity.ResultVO;
import entity.StatusCode; import entity.StatusCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import util.IdWorker; import util.IdWorker;
import util.JwtUtil; import util.JwtUtil;
@ -31,6 +35,7 @@ import util.JwtUtil;
@RestController @RestController
@CrossOrigin @CrossOrigin
@RequestMapping("/user") @RequestMapping("/user")
@Api(tags="UserController")
public class UserController { public class UserController {
@Autowired @Autowired
@ -73,37 +78,30 @@ public class UserController {
return new Result(true,StatusCode.OK,"登录成功",map); return new Result(true,StatusCode.OK,"登录成功",map);
} }
@ApiOperation(value="2.登录/注册后返回token")
@RequestMapping(value = "/appLogin/{mobile}/{checkcode}",method = RequestMethod.POST) @RequestMapping(value = "/appLogin/{mobile}/{checkcode}",method = RequestMethod.POST)
public Result appLogin(@PathVariable String mobile,@PathVariable String checkcode){ public ResultVO appLogin(@PathVariable String mobile,@PathVariable String checkcode){
// 得到缓存中的验证码 // 得到缓存中的验证码
String checkcodeRedis = (String)redisTemplate.opsForValue().get("checkcode_"+mobile); String checkcodeRedis = (String)redisTemplate.opsForValue().get("checkcode_"+mobile);
if (checkcodeRedis.isEmpty()){ if (checkcodeRedis.isEmpty()){
return new Result(false,StatusCode.ERROR,"请先获取手机验证码"); return new ResultVO(false,StatusCode.ERROR,"请先获取手机验证码");
} }
if (!checkcodeRedis.equals(checkcode)) { if (!checkcodeRedis.equals(checkcode)) {
return new Result(false,StatusCode.ERROR,"请输入正确的验证码"); return new ResultVO(false,StatusCode.ERROR,"请输入正确的验证码");
} }
UserVO userVO=userService.loginOrRegister(mobile);
User user = userService.findByMobile(mobile); return ResultVO.success(userVO);
// 如果数据库中有这个手机号,登录通道, }
if (user != null){
String token = jwtUtil.createJWT(user.getId(),user.getMobile(),"user");
}
// 如果数据库中没有这个手机号,为新用户,注册添加用户
return new Result(true,StatusCode.OK,"登录成功");}
/** /**
* *
*/ */
@ApiOperation(value="1.发送短信验证码")
@RequestMapping(value = "/sendsms/{mobile}",method = RequestMethod.POST) @RequestMapping(value = "/sendsms/{mobile}",method = RequestMethod.POST)
public Result sendSms(@PathVariable String mobile) { public ResultVO<Void> sendSms(@PathVariable String mobile) {
userService.sendSms(mobile); userService.sendSms(mobile);
return new Result(true,StatusCode.OK,"发送成功"); return ResultVO.success("发送成功");
} }
@RequestMapping(value = "/register/{code}",method = RequestMethod.POST) @RequestMapping(value = "/register/{code}",method = RequestMethod.POST)

@ -17,6 +17,7 @@ import io.jsonwebtoken.Claims;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate; import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
@ -29,8 +30,11 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import util.IdWorker; import util.IdWorker;
import com.apifan.common.random.RandomSource;
import com.luoo.user.dao.UserDao; import com.luoo.user.dao.UserDao;
import com.luoo.user.pojo.User; import com.luoo.user.pojo.User;
import com.luoo.user.vo.UserVO;
import util.JwtUtil; import util.JwtUtil;
/** /**
@ -249,7 +253,23 @@ public class UserService {
userDao.updatefanscount(x,friendid); userDao.updatefanscount(x,friendid);
userDao.updatefollowcount(x,userid); userDao.updatefollowcount(x,userid);
} }
public UserVO loginOrRegister(String mobile) {
User user = userDao.findByMobile(mobile);
if(null==user) {
user=new User();
user.setId(String.valueOf(idWorker.nextId()));
user.setMobile(mobile);
user.setNickname(RandomSource.personInfoSource().randomChineseNickName(8));
user.setAvatar("default");
userDao.save(user);
}
UserVO userVO=new UserVO();
BeanUtils.copyProperties(user, userVO);
String token = jwtUtil.createJWT(user.getId(),user.getMobile(),"user");
userVO.setToken(token);
return userVO;
}
public User findByMobile(String mobile) { public User findByMobile(String mobile) {
User user = userDao.findByMobile(mobile); User user = userDao.findByMobile(mobile);
return user; return user;

@ -0,0 +1,58 @@
package com.luoo.user.swagger;
import org.springframework.context.annotation.Bean;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.RequestMethod;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseSwaggerConfig {
@Bean
@Order(value = 1)
public Docket createRestApi() {
List<ResponseMessage> responseMessageList =new ArrayList<>();
responseMessageList.add(new ResponseMessageBuilder().code(200).message("成功").responseModel(new ModelRef("成功")).build());
responseMessageList.add(new ResponseMessageBuilder().code(20001).message("失败").responseModel(new ModelRef("失败")).build());
responseMessageList.add(new ResponseMessageBuilder().code(20002).message("用户名或密码错误").responseModel(new ModelRef("用户名或密码错误")).build());
responseMessageList.add(new ResponseMessageBuilder().code(20003).message("无权访问").responseModel(new ModelRef("无权访问")).build());
responseMessageList.add(new ResponseMessageBuilder().code(20009).message("重复提交").responseModel(new ModelRef("重复提交")).build());
SwaggerProperties swaggerProperties = swaggerProperties();
return new Docket(DocumentationType.SWAGGER_2)
.globalResponseMessage(RequestMethod.GET, responseMessageList)
.globalResponseMessage(RequestMethod.POST, responseMessageList)
.globalResponseMessage(RequestMethod.PUT, responseMessageList)
.globalResponseMessage(RequestMethod.DELETE, responseMessageList)
.apiInfo(apiInfo(swaggerProperties))
.select()
.apis(RequestHandlerSelectors.basePackage(swaggerProperties.getApiBasePackage()))
//.apis(RequestHandlerSelectors.withClassAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo(SwaggerProperties swaggerProperties) {
return new ApiInfoBuilder()
.title(swaggerProperties.getTitle())
.description(swaggerProperties.getDescription())
.contact(new Contact(swaggerProperties.getContactName(), swaggerProperties.getContactUrl(), swaggerProperties.getContactEmail()))
.version(swaggerProperties.getVersion())
.build();
}
/**
* Swagger
*/
public abstract SwaggerProperties swaggerProperties();
}

@ -0,0 +1,25 @@
package com.luoo.user.swagger;
import org.springframework.context.annotation.Configuration;
import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class SwaggerConfig extends BaseSwaggerConfig {
@Override
public SwaggerProperties swaggerProperties() {
return SwaggerProperties.builder()
.apiBasePackage("com.luoo.user.controller")
.title("luoo-user API")
.description("luoo-user 后端接口文档")
.contactName("何长庚")
.version("1.0")
.enableSecurity(false)
.build();
}
}

@ -0,0 +1,47 @@
package com.luoo.user.swagger;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* Swagger
* Created by macro on 2020/7/16.
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Builder
public class SwaggerProperties {
/**
* API
*/
private String apiBasePackage;
/**
*
*/
private boolean enableSecurity;
/**
*
*/
private String title;
/**
*
*/
private String description;
/**
*
*/
private String version;
/**
*
*/
private String contactName;
/**
*
*/
private String contactUrl;
/**
*
*/
private String contactEmail;
}

@ -0,0 +1,17 @@
package com.luoo.user.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "用户")
public class UserVO {
@ApiModelProperty(value = "ID")
private String id;//ID
@ApiModelProperty(value = "昵称",notes="初次登录,随机生成")
private String nickname;//昵称
@ApiModelProperty(value = "头像",notes="初次登录,默认头像")
private String avatar;//头像
@ApiModelProperty(value = "TOKEN")
private String token;
}
Loading…
Cancel
Save