package com.doumee.api.web; import com.doumee.config.Jwt.JwtProperties; import com.doumee.config.Jwt.JwtTokenUtil; import com.doumee.config.annotation.LoginRequired; import com.doumee.core.annotation.pr.PreventRepeat; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.model.Member; import com.doumee.dao.web.dto.LoginH5DTO; import com.doumee.dao.web.dto.UpdEmailDTO; import com.doumee.service.business.MemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ServerWebExchange; import javax.annotation.Resource; /** * JWT获取令牌和刷新令牌接口 */ @RestController @Api(tags ="web端用户相关接口") @RequestMapping("/web/member") public class WebMemberController { @Resource private JwtTokenUtil jwtTokenUtil; @Resource private MemberService memberService; @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("H5业务登录") @PostMapping("/loginH5") public ApiResponse loginH5 (@Validated @RequestBody LoginH5DTO dto, ServerWebExchange serverWebExchange) { try { ServerHttpRequest request = serverWebExchange.getRequest(); //拿CODE换qwid,先查下本系统是否存在,存在直接返回member,否则用qwid查询企业用户数据,插入数据库(member) Member user = memberService.getUserInfo(dto); String token = jwtTokenUtil.generateToken(user); user.setToken(token); return ApiResponse.success(user); }catch (BusinessException e){ return ApiResponse.failed(e.getCode(),e.getMessage()); }catch (Exception e){ e.printStackTrace(); return ApiResponse.failed(ResponseStatus.SERVER_ERROR); } } @LoginRequired @ApiOperation("更新用户邮箱信息") @PostMapping("/upateInfo") public ApiResponse upateInfo (@RequestBody UpdEmailDTO updEmailDTO ,@RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange) { try { ServerHttpRequest request = serverWebExchange.getRequest(); Member user = jwtTokenUtil.getUserInfoByToken(token); updEmailDTO.setUserId(user.getId()); memberService.updEmail(updEmailDTO); return ApiResponse.success("操作成功"); }catch (BusinessException e){ return ApiResponse.failed(e.getCode(),e.getMessage()); }catch (Exception e){ e.printStackTrace(); return ApiResponse.failed(ResponseStatus.SERVER_ERROR); } } /** * 刷新JWT令牌,用旧的令牌换新的令牌 */ @LoginRequired @GetMapping("/getMemberInfo") @ApiOperation("获取当前登陆用户") public ApiResponse getMemberInfo(@RequestHeader(JwtTokenUtil.HEADER_KEY) String token){ try { Member user = jwtTokenUtil.getUserInfoByToken(token); user = memberService.checkUserValid(user); user.setToken(jwtTokenUtil.refreshToken(token));//每次更新token有效期 if(user !=null){ return ApiResponse.success( user); } }catch (BusinessException e){ return ApiResponse.failed(e.getCode(),e.getMessage()); }catch (Exception e){ return ApiResponse.failed(ResponseStatus.SERVER_ERROR); } return ApiResponse.failed( "登录已失效"); } }