map = BeanUtil.beanToStringMap(object);
82 | Object token = BaseContextHandler.get(KEY);
83 | ResultActions mockResult = mockMvc.perform(
84 | get(uri)
85 | .contentType(MediaType.APPLICATION_JSON_UTF8)
86 | .sessionAttr("id", "1")
87 | .params(map)
88 | .header(KEY, null == token ? "" : String.valueOf(token)
89 | )
90 | );
91 | return mockResult;
92 | }
93 |
94 | protected void userLogin() {
95 | String token = JwtHelper.createToken("testUser", BigInteger.valueOf(10001));
96 | BaseContextHandler.set(KEY, token);
97 | }
98 |
99 | }
100 |
--------------------------------------------------------------------------------
/src/main/java/com/mvc/sell/console/config/SwaggerConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.mvc.sell.console.config;
2 |
3 | import org.springframework.boot.bind.RelaxedPropertyResolver;
4 | import org.springframework.context.EnvironmentAware;
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 | import org.springframework.core.env.Environment;
8 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
9 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
10 | import springfox.documentation.builders.ApiInfoBuilder;
11 | import springfox.documentation.builders.ParameterBuilder;
12 | import springfox.documentation.builders.PathSelectors;
13 | import springfox.documentation.builders.RequestHandlerSelectors;
14 | import springfox.documentation.schema.ModelRef;
15 | import springfox.documentation.service.ApiInfo;
16 | import springfox.documentation.service.Parameter;
17 | import springfox.documentation.spi.DocumentationType;
18 | import springfox.documentation.spring.web.plugins.Docket;
19 | import springfox.documentation.swagger2.annotations.EnableSwagger2;
20 |
21 | import java.util.ArrayList;
22 | import java.util.List;
23 |
24 | /**
25 | * swagger配置项
26 | *
27 | * @author wanghaobin
28 | * @description
29 | * @date 2017年6月20日
30 | * @since 1.7
31 | */
32 | @Configuration
33 | @EnableSwagger2
34 | public class SwaggerConfiguration extends WebMvcConfigurerAdapter implements EnvironmentAware {
35 | private String basePackage;
36 | private String creatName;
37 | private String serviceName;
38 | private RelaxedPropertyResolver propertyResolver;
39 | private String description;
40 |
41 | /**
42 | * 这个地方要重新注入一下资源文件,不然不会注入资源的,也没有注入requestHandlerMappping,相当于xml配置的
43 | *
44 | *
45 | *
46 | *
47 | *
48 | *
49 | *
50 | * 不知道为什么,这也是spring boot的一个缺点(菜鸟觉得的)
51 | *
52 | * @param registry
53 | */
54 | @Override
55 | public void addResourceHandlers(ResourceHandlerRegistry registry) {
56 | registry.addResourceHandler("swagger-ui.html")
57 | .addResourceLocations("classpath:/META-INF/resources/");
58 | registry.addResourceHandler("/webjars*")
59 | .addResourceLocations("classpath:/META-INF/resources/webjars/");
60 | }
61 |
62 |
63 | @Bean
64 | public Docket createRestApi() {
65 | //可以添加多个header或参数
66 | ParameterBuilder aParameterBuilder = new ParameterBuilder();
67 | aParameterBuilder
68 | .parameterType("header")
69 | .name("Authorization")
70 | .description("token")
71 | .modelRef(new ModelRef("string"))
72 | .required(false).build();
73 | List aParameters = new ArrayList<>();
74 | aParameters.add(aParameterBuilder.build());
75 |
76 | return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
77 | .select()
78 | .apis(RequestHandlerSelectors.basePackage(this.basePackage))
79 | .paths(PathSelectors.any()
80 | ).build().globalOperationParameters(aParameters);
81 | }
82 |
83 | private ApiInfo apiInfo() {
84 | return new ApiInfoBuilder()
85 | .title(this.serviceName + " Restful APIs")
86 | .description(this.description)
87 | .contact(this.creatName).version("1.0").build();
88 | }
89 |
90 | @Override
91 | public void setEnvironment(Environment environment) {
92 | this.propertyResolver = new RelaxedPropertyResolver(environment, null);
93 | this.basePackage = propertyResolver.getProperty("swagger.basepackage");
94 | this.creatName = propertyResolver.getProperty("swagger.service.developer");
95 | this.serviceName = propertyResolver.getProperty("swagger.service.name");
96 | this.description = propertyResolver.getProperty("swagger.service.description");
97 | }
98 | }
--------------------------------------------------------------------------------
/src/main/java/com/mvc/sell/console/common/interceptor/ServiceAuthRestInterceptor.java:
--------------------------------------------------------------------------------
1 | package com.mvc.sell.console.common.interceptor;
2 |
3 | import com.github.pagehelper.PageHelper;
4 | import com.mvc.common.context.BaseContextHandler;
5 | import com.mvc.common.exception.auth.TokenErrorException;
6 | import com.mvc.sell.console.common.annotation.Check;
7 | import com.mvc.sell.console.common.annotation.NeedLogin;
8 | import com.mvc.sell.console.common.exception.CheckeException;
9 | import com.mvc.sell.console.constants.MessageConstants;
10 | import com.mvc.sell.console.util.JwtHelper;
11 | import io.jsonwebtoken.Claims;
12 | import org.apache.commons.lang3.StringUtils;
13 | import org.slf4j.Logger;
14 | import org.slf4j.LoggerFactory;
15 | import org.springframework.beans.factory.annotation.Value;
16 | import org.springframework.web.method.HandlerMethod;
17 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
18 |
19 | import javax.security.auth.login.LoginException;
20 | import javax.servlet.http.HttpServletRequest;
21 | import javax.servlet.http.HttpServletResponse;
22 | import java.math.BigInteger;
23 |
24 | /**
25 | * @author qyc
26 | */
27 | public class ServiceAuthRestInterceptor extends HandlerInterceptorAdapter {
28 | private Logger logger = LoggerFactory.getLogger(ServiceAuthRestInterceptor.class);
29 |
30 | @Value("${service.eurekaKey}")
31 | private String eurekaKey;
32 |
33 | @Override
34 | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
35 | BaseContextHandler.remove();
36 | super.afterCompletion(request, response, handler, ex);
37 | }
38 |
39 | @Override
40 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
41 | HandlerMethod handlerMethod = (HandlerMethod) handler;
42 |
43 | String token = request.getHeader("Authorization");
44 | Claims claim = JwtHelper.parseJWT(token);
45 | NeedLogin loginAnn = handlerMethod.getMethodAnnotation(NeedLogin.class);
46 | Check checkAnn = handlerMethod.getMethodAnnotation(Check.class);
47 | checkAnnotation(claim, loginAnn, checkAnn, request.getRequestURI(), request);
48 | setUserInfo(claim);
49 | setPage(request);
50 | return super.preHandle(request, response, handler);
51 | }
52 |
53 | private void checkAnnotation(Claims claim, NeedLogin loginAnn, Check checkAnn, String uri, HttpServletRequest request) throws LoginException, CheckeException {
54 | Boolean isFeign = "feign".equalsIgnoreCase(request.getHeader("type")) && eurekaKey.equalsIgnoreCase(request.getHeader("eurekaKey"));
55 | if (null == claim && null != loginAnn && !isFeign) {
56 | if (uri.indexOf("/refresh") > 0 ){
57 | throw new LoginException(MessageConstants.getMsg("TOKEN_WRONG"));
58 | } else {
59 | throw new TokenErrorException(MessageConstants.getMsg("TOKEN_EXPIRE"), MessageConstants.TOKEN_EXPIRE_CODE);
60 | }
61 | }
62 | if (null != claim) {
63 | JwtHelper.check(claim, uri, isFeign);
64 | }
65 | }
66 |
67 | public void setUserInfo(Claims userInfo) {
68 | if (null != userInfo) {
69 | String username = userInfo.get("username", String.class);
70 | Integer userId = userInfo.get("userId", Integer.class);
71 | BaseContextHandler.set("username", username);
72 | BaseContextHandler.set("userId", BigInteger.valueOf(userId.longValue()));
73 | }
74 | }
75 |
76 | public void setPage(HttpServletRequest request) {
77 | if ("GET".equalsIgnoreCase(request.getMethod())) {
78 | String pageNo = request.getParameter("pageNum");
79 | String pageSize = request.getParameter("pageSize");
80 | String orderBy = request.getParameter("orderBy");
81 | if (StringUtils.isNotBlank(pageNo) && StringUtils.isNotBlank(pageSize)) {
82 | PageHelper.startPage(Integer.valueOf(pageNo), Integer.valueOf(pageSize));
83 | }
84 | if (StringUtils.isNotBlank(orderBy)) {
85 | PageHelper.orderBy(orderBy);
86 | }
87 | }
88 | }
89 |
90 | }
91 |
--------------------------------------------------------------------------------
/src/main/java/com/mvc/sell/console/controller/ProjectController.java:
--------------------------------------------------------------------------------
1 | package com.mvc.sell.console.controller;
2 |
3 | import com.github.pagehelper.PageInfo;
4 | import com.mvc.common.msg.Result;
5 | import com.mvc.common.msg.ResultGenerator;
6 | import com.mvc.sell.console.common.Page;
7 | import com.mvc.sell.console.common.annotation.NeedLogin;
8 | import com.mvc.sell.console.pojo.dto.BuyDTO;
9 | import com.mvc.sell.console.pojo.dto.MyProjectDTO;
10 | import com.mvc.sell.console.pojo.dto.ProjectDTO;
11 | import com.mvc.sell.console.pojo.dto.WithdrawDTO;
12 | import com.mvc.sell.console.pojo.vo.*;
13 | import io.swagger.annotations.ApiOperation;
14 | import org.springframework.web.bind.annotation.*;
15 | import springfox.documentation.annotations.ApiIgnore;
16 |
17 | import javax.validation.Valid;
18 | import java.io.UnsupportedEncodingException;
19 | import java.math.BigInteger;
20 | import java.util.Map;
21 |
22 | /**
23 | * project controller
24 | *
25 | * @author qiyichen
26 | * @create 2018/3/10 17:21
27 | */
28 | @RestController
29 | @RequestMapping("project")
30 | public class ProjectController extends BaseController {
31 |
32 | @ApiOperation("查询项目列表")
33 | @GetMapping
34 | @NeedLogin
35 | Result> list(@ModelAttribute Page page) {
36 | return ResultGenerator.genSuccessResult(projectService.list());
37 | }
38 |
39 | @ApiOperation("新增项目")
40 | @PostMapping
41 | @NeedLogin
42 | Result add(@RequestBody @Valid ProjectDTO project) {
43 | project.setId(null);
44 | projectService.insert(project);
45 | return ResultGenerator.genSuccessResult();
46 | }
47 |
48 | @ApiOperation("修改项目")
49 | @PutMapping
50 | @NeedLogin
51 | Result update(@RequestBody @Valid ProjectDTO project) {
52 | projectService.update(project);
53 | return ResultGenerator.genSuccessResult();
54 | }
55 |
56 | @ApiOperation("获取单项项目详情")
57 | @GetMapping("{id}")
58 | @NeedLogin
59 | Result get(@PathVariable BigInteger id) {
60 | return ResultGenerator.genSuccessResult(projectService.get(id));
61 | }
62 |
63 | @ApiOperation("项目销售总数据")
64 | @GetMapping("{id}/sold")
65 | @NeedLogin
66 | Result sold(@PathVariable BigInteger id) {
67 | return ResultGenerator.genSuccessResult(projectService.getSold(id));
68 | }
69 |
70 | @ApiOperation("获取oss签名")
71 | @GetMapping("signature")
72 | @NeedLogin
73 | Result