3 changed files with 128 additions and 0 deletions
@ -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 { |
||||
|
} |
@ -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; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue