短链接分组模块
新增短链接分组
在新增之前,需要判断gid是否是唯一的。
java
//检查gid是否已存在,保证gid唯一
public boolean hasGid(String gid){
LambdaQueryWrapper<GroupDO> queryWrapper = Wrappers.lambdaQuery(GroupDO.class)
.eq(GroupDO::getGid, gid)
.eq(GroupDO::getUsername, UserContext.getUsername());
GroupDO hasGroupFlag=baseMapper.selectOne(queryWrapper);
return hasGroupFlag==null;
}
设置用户上下文
common/biz/user下和config下UserConfiguration
其中,@JSONField(name = "id")来设置userinfodto中的userid。
设置线程安全的TTL,实现跨线程的异步传输。
了解原理:ttl原理
@JSONField注解可以用在方法(method),属性(field)以及方法中的参数(parameter)上。JSONField中的name属性用来指定JSON串中key的名称。
修改短链接分组
在修改功能实现时,会出现请求成功了,但是数据库信息未更改,原因是token已经过期了,所以需要重新登录。在用户信息传输过滤器中filter需要将登录路径排除。(实际需要在网关配置)
java
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String requestURI=httpServletRequest.getRequestURI();
if(!Objects.equals(requestURI,"/api/short-link/v1/user/login")){
String username = httpServletRequest.getHeader("username");
String token = httpServletRequest.getHeader("token");
Object userInfoJsonStr = stringRedisTemplate.opsForHash().get("login_" + username, token);
if(userInfoJsonStr!=null){
UserInfoDTO userInfoDTO = JSON.parseObject(userInfoJsonStr.toString(), UserInfoDTO.class);
UserContext.setUser(userInfoDTO);
}
}
try {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
UserContext.removeUser();
}
}
删除短链接分组
删除一般用软删除,所以用update做。
设置delflag为1。