提交 d89773d3 作者: xiaowang

返回用户信息

上级 a4fd29cb
package com.mmc.csf.release.auth.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月31日 下午8:06:14
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LoginSuccessDTO implements Serializable {
private static final long serialVersionUID = -1200834589953161925L;
private String token;
private Integer userAccountId;
private String accountNo;
private String uid;
private String phoneNum;
private String userName;
private String nickName;
// private RoleInfoDTO roleInfo;
}
......@@ -18,8 +18,6 @@ import java.util.List;
@AllArgsConstructor
public class RegistrationVO implements Serializable {
private static final long serialVersionUID = -3364708963790356041L;
@ApiModelProperty(value = "模拟用户id(后面从token获取,临时传下)")
private Integer id;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "城市")
......
......@@ -26,8 +26,10 @@ public class CommentAndReplyVO implements Serializable {
private Integer dynamicId;
@ApiModelProperty(value = "父级评论id")
private Integer parentId;
@ApiModelProperty(value = "动态发布人的id(后期返回用户头像昵称信息)")
@ApiModelProperty(value = "动态发布人的id")
private Integer userId;
@ApiModelProperty(value = "用户信息")
private UserBaseInfoVO userBaseInfoVO;
@ApiModelProperty(value = "评论内容")
private String content;
@ApiModelProperty(value = "评论点赞数")
......
......@@ -24,8 +24,6 @@ public class CommentVO implements Serializable {
private Integer dynamicId;
@ApiModelProperty(value = "父级评论id(不传则是评论动态 传了则是回复评论)")
private Integer parentId;
@ApiModelProperty(value = "模拟用户id")
private Integer userId;
@ApiModelProperty(value = "评论内容")
private String content;
}
......@@ -21,8 +21,8 @@ import java.util.List;
@AllArgsConstructor
@Builder
public class DynamicVO implements Serializable {
@ApiModelProperty(value = "模拟用户id")
private Integer userId;
@ApiModelProperty(value = "发布动态用户信息")
private UserBaseInfoVO userBaseInfo;
@ApiModelProperty(value = "动态id")
private Integer id;
@ApiModelProperty(value = "动态标题")
......
package com.mmc.csf.release.forum.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author LW
* @date 2023/5/29 15:30
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserBaseInfoVO implements Serializable {
@ApiModelProperty(value = "用户id")
private Integer id;
@ApiModelProperty(value = "用户昵称")
private String nickName;
@ApiModelProperty(value = "用户头像")
private String userImg;
}
package com.mmc.csf.release.auth;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import java.util.Objects;
/**
* Author: geDuo
* Date: 2022/6/2 17:26
*/
@Configuration
public class DataFilterYml {
@Bean
public static PropertySourcesPlaceholderConfigurer loadYml(){
PropertySourcesPlaceholderConfigurer configurer=new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml=new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("not-check.yml"));
configurer.setProperties(Objects.requireNonNull(yaml.getObject()));
return configurer;
}
}
package com.mmc.csf.release.auth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author: zj
* @Date: 2023/5/28 10:52
*/
@Configuration
public class MvcConfiguration implements WebMvcConfigurer {
@Autowired
private TokenCheckHandleInterceptor tokenCheckHandleInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenCheckHandleInterceptor);
WebMvcConfigurer.super.addInterceptors(registry);
}
}
package com.mmc.csf.release.auth;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.List;
/**
* @author: zj
* @Date: 2023/5/28 13:54
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "data-filter", ignoreUnknownFields = false)
@PropertySource("classpath:not-check.yml")
public class NotCheckUriConfig {
// 不需要验证token的请求地址
private List<String> notAuthPath;
// 不需要验证token的请求地址;// 不需要验证token的请求地址
private List<String> uploadPath;
}
package com.mmc.csf.release.auth;
import com.alibaba.fastjson.JSONObject;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.common.util.web.ResultEnum;
import com.mmc.csf.release.auth.dto.LoginSuccessDTO;
import com.mmc.csf.release.util.PathUtil;
import io.micrometer.core.instrument.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @author: zj
* @Date: 2023/5/28 10:46
*/
@Component
public class TokenCheckHandleInterceptor implements HandlerInterceptor {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private NotCheckUriConfig notCheckUriConfig;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 扫码登录还没做好,暂时先注释
String requestURI = request.getRequestURI();
//根据uri确认是否要拦截
if (!shouldFilter(requestURI)){
return true;
}
String token = request.getHeader("token");
String tokenJson = stringRedisTemplate.opsForValue().get(token);
if (StringUtils.isBlank(tokenJson)){
exceptionProcess(response);
return false;
}
LoginSuccessDTO loginSuccessDTO = JSONObject.parseObject(tokenJson, LoginSuccessDTO.class);
if (loginSuccessDTO != null){
request.setAttribute("userAccountId", loginSuccessDTO.getUserAccountId());
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
public void exceptionProcess(HttpServletResponse response) throws Exception{
response.setContentType("application/json;charset=utf-8");
PrintWriter writer=response.getWriter();
writer.write(ResultBody.error(ResultEnum.LOGIN_ACCOUNT_STATUS_ERROR).toString());
writer.close();
}
private boolean shouldFilter(String path) {
// 路径与配置的相匹配,则执行过滤
for (String pathPattern : notCheckUriConfig.getNotAuthPath()) {
if (PathUtil.isPathMatch(pathPattern, path)) {
// 如果匹配
return false;
}
}
return true;
}
}
package com.mmc.csf.release.controller;
import com.alibaba.fastjson.JSONObject;
import com.mmc.csf.common.util.web.BizException;
import com.mmc.csf.common.util.web.ResultEnum;
import com.mmc.csf.release.auth.dto.LoginSuccessDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.servlet.http.HttpServletRequest;
/**
* @author: zj
* @Date: 2023/5/25 18:11
*/
public abstract class BaseController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 解析token,获取用户信息
* @param request
* @return
*/
// public BaseAccountDTO getUserLoginInfo(HttpServletRequest request) {
// String token = request.getHeader("token");
// try {
// Claims claims = JwtUtil.parseJwt(token);
// String userId = claims.get(JwtConstant.USER_ACCOUNT_ID).toString();
//// String roleId = claims.get("").toString();
// String tokenType = claims.get(JwtConstant.TOKEN_TYPE).toString();
// return BaseAccountDTO.builder().id(Integer.parseInt(userId)).tokenPort(tokenType).build();
// }catch (Exception e){
// throw new BizException("Invalid token");
// }
// }
/**
* 使用token从redis获取用户信息
* @param request
* @return
*/
public LoginSuccessDTO getUserLoginInfoFromRedis(HttpServletRequest request) {
String token = request.getHeader("token");
String json = stringRedisTemplate.opsForValue().get(token);
if (StringUtils.isBlank(json)){
throw new BizException(ResultEnum.LOGIN_ACCOUNT_STATUS_ERROR);
}
LoginSuccessDTO loginSuccessDTO = JSONObject.parseObject(json, LoginSuccessDTO.class);
return loginSuccessDTO;
}
}
......@@ -9,6 +9,7 @@ import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* @Author LW
......@@ -18,7 +19,7 @@ import javax.annotation.Resource;
@Api(tags = {"web-小程序-论坛社区-模块"})
@RestController
@RequestMapping("/dynamic")
public class DynamicController {
public class DynamicController extends BaseController {
@Resource
private DynamicService dynamicService;
......@@ -26,22 +27,22 @@ public class DynamicController {
@ApiOperation(value = "动态发布")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/publish")
public ResultBody publishDynamic(@RequestBody DynamicVO dynamicVO) {
return dynamicService.insertDynamic(dynamicVO);
public ResultBody publishDynamic(@RequestBody DynamicVO dynamicVO, HttpServletRequest request) {
return dynamicService.insertDynamic(dynamicVO,this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "点赞或取消点赞")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("/likeOrCancel")
public ResultBody likeOrCancel(@ApiParam(value = "模拟用户id") @RequestParam Integer userId, @ApiParam(value = "动态id") @RequestParam Integer dynamicId) {
return dynamicService.likeDynamic(userId, dynamicId);
public ResultBody likeOrCancel(HttpServletRequest request, @ApiParam(value = "动态id") @RequestParam Integer dynamicId) {
return dynamicService.likeDynamic(this.getUserLoginInfoFromRedis(request).getUserAccountId(), dynamicId);
}
@ApiOperation(value = "评论动态或回复评论")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/comment")
public ResultBody commentDynamic(@RequestBody CommentVO commentVO) {
return dynamicService.commentDynamic(commentVO);
public ResultBody commentDynamic(@RequestBody CommentVO commentVO,HttpServletRequest request) {
return dynamicService.commentDynamic(commentVO,this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "删除评论")
......@@ -61,14 +62,14 @@ public class DynamicController {
@ApiOperation(value = "动态详情")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = DynamicVO.class)})
@GetMapping("/dynamicDetails")
public ResultBody dynamicDetails(@RequestParam Integer dynamicId,@RequestParam Integer userId) {
return dynamicService.dynamicDetails(dynamicId,userId);
public ResultBody dynamicDetails(@RequestParam Integer dynamicId,HttpServletRequest request) {
return dynamicService.dynamicDetails(dynamicId,this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "动态列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = DynamicVO.class)})
@GetMapping("/dynamicList")
public ResultBody dynamicList(@RequestParam Integer pageNo, @RequestParam Integer pageSize, @RequestParam Integer userId) {
return ResultBody.success(dynamicService.dynamicList(pageNo, pageSize, userId));
public ResultBody dynamicList(@RequestParam Integer pageNo, @RequestParam Integer pageSize,HttpServletRequest request) {
return ResultBody.success(dynamicService.dynamicList(pageNo, pageSize, this.getUserLoginInfoFromRedis(request).getUserAccountId()));
}
}
......@@ -11,6 +11,7 @@ import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
......@@ -21,7 +22,7 @@ import javax.annotation.Resource;
@Api(tags = {"web-小程序-飞手培训-模块"})
@RestController
@RequestMapping("/curriculum/")
public class FlyerTrainingController {
public class FlyerTrainingController extends BaseController{
@Resource
private FlyerTrainingService flyerTrainingService;
......@@ -29,8 +30,8 @@ public class FlyerTrainingController {
@ApiOperation(value = "飞手报名")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/pilotRegistration")
public ResultBody pilotRegistration(@RequestBody RegistrationVO registrationVO) {
return flyerTrainingService.pilotRegistration(registrationVO);
public ResultBody pilotRegistration(@RequestBody RegistrationVO registrationVO, HttpServletRequest request) {
return flyerTrainingService.pilotRegistration(registrationVO,this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
......
......@@ -78,7 +78,6 @@ public class ForumDynamicDO implements Serializable {
public ForumDynamicDO(DynamicVO dynamicVO) {
this.title = dynamicVO.getTitle();
this.description = dynamicVO.getDescription();
this.userId = dynamicVO.getUserId();
this.location = dynamicVO.getLocation();
this.lat = dynamicVO.getLat();
this.lon = dynamicVO.getLon();
......@@ -88,7 +87,7 @@ public class ForumDynamicDO implements Serializable {
return DynamicVO.builder().id(id).description(description)
.commentCount(commentsCount).likesCount(likesCount)
.lat(lat).lon(lon).location(location).title(title)
.userId(userId).dynamicPublishTime(createTime).build();
.dynamicPublishTime(createTime).build();
}
}
......@@ -51,7 +51,6 @@ public class PilotRegistrationDO implements Serializable {
private Integer deleted;
public PilotRegistrationDO(RegistrationVO registrationVO) {
this.applyUserId = registrationVO.getId();
this.name = registrationVO.getName();
this.city = registrationVO.getCity();
this.telephone = registrationVO.getTelephone();
......
......@@ -20,7 +20,7 @@ public interface DynamicService {
* @param dynamicVO 动态
* @return {@link ResultBody}
*/
ResultBody insertDynamic(DynamicVO dynamicVO);
ResultBody insertDynamic(DynamicVO dynamicVO,Integer userAccountId);
/**
* 点赞动态
......@@ -37,7 +37,7 @@ public interface DynamicService {
* @param commentVO 评论信息
* @return {@link ResultBody}
*/
ResultBody commentDynamic(CommentVO commentVO);
ResultBody commentDynamic(CommentVO commentVO,Integer userAccountId);
/**
* 删除评论
......
......@@ -17,7 +17,7 @@ public interface FlyerTrainingService {
* @param registrationVO 注册信息
* @return {@link ResultBody}
*/
ResultBody pilotRegistration(RegistrationVO registrationVO);
ResultBody pilotRegistration(RegistrationVO registrationVO,Integer userAccount);
/**
* 获取无人机飞行员执照
......
......@@ -2,10 +2,9 @@ package com.mmc.csf.release.service.impl;
import com.mmc.csf.common.util.page.PageResult;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.release.forum.vo.CommentAndReplyVO;
import com.mmc.csf.release.forum.vo.CommentVO;
import com.mmc.csf.release.forum.vo.DynamicVO;
import com.mmc.csf.release.forum.vo.MediaVO;
import com.mmc.csf.infomation.dto.UserAccountSimpleDTO;
import com.mmc.csf.release.feign.UserAppApi;
import com.mmc.csf.release.forum.vo.*;
import com.mmc.csf.release.dao.CommentDAO;
import com.mmc.csf.release.dao.DynamicDAO;
import com.mmc.csf.release.dao.LikeDAO;
......@@ -14,6 +13,7 @@ import com.mmc.csf.release.entity.ForumImageDO;
import com.mmc.csf.release.entity.ForumVideoDO;
import com.mmc.csf.release.service.DynamicService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -38,12 +38,15 @@ public class DynamicServiceImpl implements DynamicService {
private LikeDAO likeDAO;
@Resource
private CommentDAO commentDAO;
@Autowired
private UserAppApi userAppApi;
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody insertDynamic(DynamicVO dynamicVO) {
public ResultBody insertDynamic(DynamicVO dynamicVO,Integer userAccountId) {
// 插入动态基本信息
ForumDynamicDO forumDynamicDO = new ForumDynamicDO(dynamicVO);
forumDynamicDO.setUserId(userAccountId);
dynamicDAO.insertDynamic(forumDynamicDO);
// 插入动态图片或视频
MediaVO mediaVO = dynamicVO.getMediaVO();
......@@ -76,15 +79,15 @@ public class DynamicServiceImpl implements DynamicService {
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody commentDynamic(CommentVO commentVO) {
public ResultBody commentDynamic(CommentVO commentVO,Integer userAccountId) {
ForumDynamicDO forumDynamicDO = dynamicDAO.getDynamicInfo(commentVO.getDynamicId());
if (forumDynamicDO == null) {
return ResultBody.error("动态不存在或已删除");
}
if (commentVO.getParentId() == null) {
commentDAO.insertComment(commentVO.getUserId(), commentVO.getDynamicId(), commentVO.getContent());
commentDAO.insertComment(userAccountId, commentVO.getDynamicId(), commentVO.getContent());
} else {
commentDAO.insertReplyComment(commentVO.getUserId(), commentVO.getDynamicId(), commentVO.getContent(), commentVO.getParentId());
commentDAO.insertReplyComment(userAccountId, commentVO.getDynamicId(), commentVO.getContent(), commentVO.getParentId());
}
dynamicDAO.updateDynamicCommentCount(commentVO.getDynamicId(), forumDynamicDO.getPid());
return ResultBody.success();
......@@ -100,6 +103,14 @@ public class DynamicServiceImpl implements DynamicService {
public List<CommentAndReplyVO> getCommentAndReply(Integer dynamicId) {
// 获取评论列表
List<CommentAndReplyVO> commentList = commentDAO.selectCommentList(dynamicId);
commentList = commentList.stream().peek(d -> {
UserAccountSimpleDTO userAccountSimpleDTO = userAppApi.feignGetUserSimpleInfo(d.getUserId());
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setId(d.getUserId());
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
d.setUserBaseInfoVO(userBaseInfoVO);
}).collect(Collectors.toList());
List<CommentAndReplyVO> topLevelComment = new ArrayList<>();
Map<Integer, CommentAndReplyVO> commentMap = new HashMap<>();
// 将每个数据模型对象添加到Map中,以便在递归过程中查找它们的父母
......@@ -147,6 +158,12 @@ public class DynamicServiceImpl implements DynamicService {
}
}
DynamicVO dynamicVO = d.buildDynamicVO();
UserAccountSimpleDTO userAccountSimpleDTO = userAppApi.feignGetUserSimpleInfo(d.getUserId());
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setId(d.getUserId());
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
dynamicVO.setUserBaseInfo(userBaseInfoVO);
dynamicVO.setMediaVO(mediaVO);
// 设置是否点赞
boolean liked = likeDAO.isLiked(userId, d.getId());
......@@ -176,6 +193,12 @@ public class DynamicServiceImpl implements DynamicService {
DynamicVO dynamicVO = dynamicInfo.buildDynamicVO();
// 设置是否点赞
boolean liked = likeDAO.isLiked(userId, dynamicId);
UserAccountSimpleDTO userAccountSimpleDTO = userAppApi.feignGetUserSimpleInfo(dynamicInfo.getUserId());
UserBaseInfoVO userBaseInfoVO = new UserBaseInfoVO();
userBaseInfoVO.setNickName(userAccountSimpleDTO.getNickName());
userBaseInfoVO.setUserImg(userAccountSimpleDTO.getUserImg());
userBaseInfoVO.setId(dynamicInfo.getUserId());
dynamicVO.setUserBaseInfo(userBaseInfoVO);
dynamicVO.setLikes(liked);
// 设置评论信息
dynamicVO.setCommentAndReplyVO(this.getCommentAndReply(dynamicId));
......
......@@ -33,8 +33,9 @@ public class FlyerTrainingServiceImpl implements FlyerTrainingService {
private FlyerTrainingDao flyerTrainingDao;
@Override
public ResultBody pilotRegistration(RegistrationVO registrationVO) {
public ResultBody pilotRegistration(RegistrationVO registrationVO,Integer userAccountId) {
PilotRegistrationDO pilotRegistrationDO = new PilotRegistrationDO(registrationVO);
pilotRegistrationDO.setApplyUserId(userAccountId);
if (CollectionUtils.isNotEmpty(registrationVO.getIndustryAppAuth())) {
// 将行业应用认证的id用逗号拼接
String industryAppAuth = registrationVO.getIndustryAppAuth().stream().map(Object::toString).collect(Collectors.joining(","));
......
package com.mmc.csf.release.util;
import org.springframework.util.AntPathMatcher;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月31日 下午3:29:28
* @explain 解析地址类
*/
public class PathUtil {
private static AntPathMatcher matcher = new AntPathMatcher();
public static boolean isPathMatch(String pattern, String path) {
return matcher.match(pattern, path);
}
}
data-filter:
uploadPath: #不需要解析的body参数的地址
- /xxx/x
not-auth-path:
- /release/v2/**
- /release/doc.html
- /release/swagger-resources/**
- /release/webjars/**
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论