diff --git a/tall/src/main/java/com/ccsens/tall/annotation/MustLoginTall.java b/tall/src/main/java/com/ccsens/tall/annotation/MustLoginTall.java new file mode 100644 index 00000000..dc0a5597 --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/annotation/MustLoginTall.java @@ -0,0 +1,14 @@ +package com.ccsens.tall.annotation; + +import java.lang.annotation.*; + +/** + * @description: 用于标识方法需要登录,获取userId + * 如果未登录,直接返回用户未登录 + * @author: wang + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface MustLoginTall { +} diff --git a/tall/src/main/java/com/ccsens/tall/aspect/MustLoginTallAspect.java b/tall/src/main/java/com/ccsens/tall/aspect/MustLoginTallAspect.java new file mode 100644 index 00000000..6ba5c9da --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/aspect/MustLoginTallAspect.java @@ -0,0 +1,103 @@ +package com.ccsens.tall.aspect; + +import com.ccsens.tall.bean.po.SysUser; +import com.ccsens.tall.bean.vo.MessageVo; +import com.ccsens.tall.service.IUserService; +import com.ccsens.tall.util.RobotUtil; +import com.ccsens.util.*; +import com.ccsens.util.annotation.OperateType; +import com.ccsens.util.bean.dto.QueryDto; +import com.ccsens.util.wx.WxTemplateMessage; +import com.fasterxml.jackson.core.JsonProcessingException; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.SignatureException; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.lang.reflect.Method; + +@Order(0) +@Slf4j +@Aspect +@Component +public class MustLoginTallAspect { + @Autowired + private IUserService userService; + + @Pointcut("@annotation(com.ccsens.tall.annotation.MustLoginTall)") + public void tallAdvice(){ + + } + @After("tallAdvice()") + public Object tallAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { + //拿到参数 + Object[] args = proceedingJoinPoint.getArgs(); + + QueryDto dto = args == null || args.length < 1 ? null : (QueryDto) args[0]; + //拿到当前得request请求 + HttpServletRequest httpServletRequest = ((ServletRequestAttributes) + RequestContextHolder.getRequestAttributes()).getRequest(); + HttpServletResponse httpServletResponse = ((ServletRequestAttributes) + RequestContextHolder.getRequestAttributes()).getResponse(); +// Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + + final String authHeader = httpServletRequest.getHeader(WebConstant.HEADER_KEY_TOKEN); + if (authHeader == null || !authHeader.startsWith(WebConstant.HEADER_KEY_TOKEN_PREFIX)) { + HttpServletUtil.responseJson(httpServletResponse, + JacksonUtil.beanToJson(JsonResponse.newInstance().tokenNotFound())); + //return httpServletResponse; + } + final String token = authHeader.substring(WebConstant.HEADER_KEY_TOKEN_PREFIX.length()); + + //验证token是否有效 + Claims claims = null; + try { + claims = JwtUtil.parseJWT(token, WebConstant.JWT_ACCESS_TOKEN_SECERT); + }catch(SignatureException e){ + HttpServletUtil.responseJson(httpServletResponse, + JacksonUtil.beanToJson(JsonResponse.newInstance().tokenSignatureFail(e.getMessage()))); + //return httpServletResponse; + }catch(ExpiredJwtException e){ + HttpServletUtil.responseJson(httpServletResponse, + JacksonUtil.beanToJson(JsonResponse.newInstance().tokenExpire(e.getMessage()))); + //return httpServletResponse; + }catch(Exception e){ + HttpServletUtil.responseJson(httpServletResponse, + JacksonUtil.beanToJson(JsonResponse.newInstance().tokenFailed(e.getMessage()))); + // return httpServletResponse; + } + + //验证用户存根 + if(userService.tokenNotExistInCache(Long.valueOf(claims.getSubject()))){ + HttpServletUtil.responseJson(httpServletResponse, + JacksonUtil.beanToJson(JsonResponse.newInstance().tokenStubNotFound())); + // return httpServletResponse; + } + + + //验证用户是否禁用 + SysUser user = userService.getUserById(Long.valueOf(claims.getSubject())); + if(user.getRecStatus() == WebConstant.REC_STATUS.Disabled.value){ + HttpServletUtil.responseJson(httpServletResponse, + JacksonUtil.beanToJson(JsonResponse.newInstance().userDisabled())); + // return httpServletResponse; + } + Object proceed = proceedingJoinPoint.proceed(); + return proceed; + } +} diff --git a/tall/src/main/java/com/ccsens/tall/web/LwbsController.java b/tall/src/main/java/com/ccsens/tall/web/LwbsController.java index bb2da721..f03e984b 100644 --- a/tall/src/main/java/com/ccsens/tall/web/LwbsController.java +++ b/tall/src/main/java/com/ccsens/tall/web/LwbsController.java @@ -1,6 +1,7 @@ package com.ccsens.tall.web; import com.ccsens.cloudutil.annotation.MustLogin; +import com.ccsens.tall.annotation.MustLoginTall; import com.ccsens.tall.bean.dto.InputDocDto; import com.ccsens.tall.bean.dto.LwbsDto; import com.ccsens.tall.bean.vo.LwbsVo; @@ -46,4 +47,14 @@ public class LwbsController { log.info("查询某人下参加的项目的所有的任务"); return JsonResponse.newInstance().ok(selBylwbs); } + @MustLoginTall + @ApiOperation(value = "test", notes = "1007:输出") + @RequestMapping(value = "/test", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse test(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("查询某人下参加的项目的所有的任务:{}",params); +// List selBylwbs= iInputDocService.selByProjectIdToTask(params.getParam(),params.getUserId()); +// log.info("查询某人下参加的项目的所有的任务"); + System.out.println("走这个"); + return JsonResponse.newInstance().ok(); + } }