package com.futuredata.web.portrait.aspect;
import com.futuredata.web.portrait.login.utils.MemoryCache;
import com.futuredata.web.portrait.pojo.Response;
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.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
* @Author: rui.wang
* @Date: 2019/11/14
*/
@Component
@Aspect
public class loginAspect {
@Pointcut("within(com.futuredata.web.portrait.controller.*) && !within(com.futuredata.web.portrait.login.api.*) && !execution(public * com.futuredata.web.portrait.controller.CompareAnalysisViewApi.exportAbilityCompareData(..)) && !execution(public * com.futuredata.web.portrait.controller.PoliticsApi.importData(..))")
public void login(){
}
@Around("login()")
public Object auth(ProceedingJoinPoint joinPoint) throws Throwable {
// 获取session中的用户信息
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
if (token != null && MemoryCache.get(token) != null){
return joinPoint.proceed();
}else {
return new Response(-1, "token不存在或已过期");
}
}
}
package com.futuredata.web.portrait.login.utils;
import avro.shaded.com.google.common.collect.Maps;
import com.futuredata.web.portrait.login.pojo.CacheObject;
import java.util.Map;
/**
* @Author: rui.wang
* @Date: 2019/11/14
*/
public class MemoryCache {
public static Map<String, CacheObject> cacheObjectMap = Maps.newConcurrentMap();
private static final long cachedTime = 20 * 24 * 60 * 60000;
public static Object get(String key) {
if (cacheObjectMap.containsKey(key)) {
CacheObject cacheObject = cacheObjectMap.get(key);
if (cacheObject != null) {
if (System.currentTimeMillis() - cacheObject.getCreateTime() < cachedTime) {
cacheObject.setCreateTime(System.currentTimeMillis());
return cacheObject.getData();
} else {
cacheObjectMap.remove(key);
}
}
}
return null;
}
public static void put(String key, Object value) {
CacheObject cacheObject = new CacheObject(value);
cacheObjectMap.put(key, cacheObject);
}
public static void remove(String key) {
cacheObjectMap.remove(key);
}
}