4 changed files with 116 additions and 5 deletions
@ -0,0 +1,14 @@ |
|||
package com.ccsens.signin.annotation; |
|||
|
|||
import java.lang.annotation.*; |
|||
|
|||
/** |
|||
* @description: 用于标识方法需要登录,获取userId |
|||
* 如果未登录,直接返回用户未登录 |
|||
* @author: wang |
|||
*/ |
|||
@Documented |
|||
@Retention(RetentionPolicy.RUNTIME) |
|||
@Target(ElementType.METHOD) |
|||
public @interface MustLoginTall { |
|||
} |
@ -0,0 +1,96 @@ |
|||
package com.ccsens.signin.aspect; |
|||
|
|||
|
|||
import com.ccsens.signin.bean.po.SysUser; |
|||
import com.ccsens.signin.service.IUserService; |
|||
import com.ccsens.util.*; |
|||
import com.ccsens.util.bean.dto.QueryDto; |
|||
import io.jsonwebtoken.Claims; |
|||
import io.jsonwebtoken.ExpiredJwtException; |
|||
import io.jsonwebtoken.SignatureException; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.aspectj.lang.ProceedingJoinPoint; |
|||
import org.aspectj.lang.annotation.Around; |
|||
import org.aspectj.lang.annotation.Aspect; |
|||
import org.aspectj.lang.annotation.Pointcut; |
|||
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; |
|||
|
|||
@Order(0) |
|||
@Slf4j |
|||
@Aspect |
|||
@Component |
|||
public class MustLoginTallAspect { |
|||
@Autowired |
|||
private IUserService userService; |
|||
|
|||
@Pointcut("@annotation(com.ccsens.signin.annotation.MustLoginTall)") |
|||
public void tallAdvice(){ |
|||
|
|||
} |
|||
@Around("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(); |
|||
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; |
|||
} |
|||
dto.setUserId(user.getId()); |
|||
dto.setUserName(user.getNickname()); |
|||
dto.setAvatarUrl(user.getAvatarUrl()); |
|||
args[0]=dto; |
|||
Object proceed = proceedingJoinPoint.proceed(args); |
|||
return proceed; |
|||
} |
|||
} |
Loading…
Reference in new issue