package com.xw.web.config;
import com.google.common.cache.Cache;
import com.xw.core.base.result.BaseResult;
import com.xw.core.constant.ResultCodeEnum;
import com.xw.core.session.Session;
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.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
@Component
@Aspect
public class LoginConfig {
@Autowired
private Cache cache;
@Resource(name = "pcCache")
private Cache cache1;
/**
*需要登陆的接口名
*/
@Pointcut("execution(* com.xw.web.controller..*.*(..))")
public void auth() {
}
/**
*不需要登陆的接口名
*/
@Pointcut("execution(* com.xw.web.controller.UserController.login(..))"+
" || execution(* com.xw.web.controller.InformationController.findById(..))"+
" || execution(* com.xw.web.controller.InformationController.list(..))"+
")")
public void unauth() {
}
@Around("auth() && !unauth()")
public Object saveProductByEdit(ProceedingJoinPoint pjp) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
String token = attributes.getRequest().getHeader("token");
if (null == token || "".equals(token)) {
return new BaseResult<>(ResultCodeEnum.HTTP_LOGIN);
}
Session session = (Session) cache.getIfPresent(token);
if (null == session) {
session = (Session) cache1.getIfPresent(token);
if (null == session) {
return new BaseResult<>(ResultCodeEnum.HTTP_LOGIN);
}
}
attributes.setAttribute("session", session, 1);
return pjp.proceed();
}
}
根据token判断接口是否需要登陆才能操作
最新推荐文章于 2024-07-14 22:18:32 发布