spring -- 登录拦截器

Spring除了支持Schema方式配置AOP,还支持注解方式:使用@Aspect来配置

 

@Component
@Aspect
public class LogInterceptor {
private Logger logger = LoggerFactory.getLogger(LogInterceptor.class);


@Pointcut("execution(* com.cyb.*.controller.*.*(..))")
public void pointCut() {
// logger.info("ponit....");

}

@Before("pointCut()")
public void before() {
// logger.info("被拦截方法调用之前调用此方法,输出此语句");
}

@After("pointCut()")
public void after() {
// logger.info("被拦截方法调用之后调用此方法,输出此语句");
}

@SuppressWarnings("rawtypes")
@Around("pointCut()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
String className = pjp.getTarget().getClass().getSimpleName();
String methodName = pjp.getSignature().getName() + "()";
Object[] paramValues = pjp.getArgs();
ObjectMapper objectMapper = new ObjectMapper();

List<Object> paramafter=new ArrayList<Object>();
for(Object param:paramValues){
if(!(param instanceof HttpServletRequest)
&&!(param instanceof HttpServletResponse)&&!(param instanceof HttpSession)){
paramafter.add(param);
}
}

String paramValuesStr=objectMapper.writeValueAsString(paramafter);

MethodSignature joinPointObject = (MethodSignature) pjp.getSignature();

String [] paramnames=joinPointObject.getParameterNames();
List<String> names=new ArrayList<String>();
for(String paramname:paramnames){
if(!"request".equals(paramname)&&!"response".equals(paramname)&&!"session".equals(paramname)){
names.add(paramname);
}
}

logger.info("类名: {}, 方法名: {}, 参数名: {},参数值: {}", new Object[] { className, methodName,
names, paramValuesStr });
Object obj = pjp.proceed();
Object logObj = obj;
if (obj != null) {
if (obj instanceof List && ((List) obj).size() > 10) {
logObj = ((List) obj).size();
}
}


String resultJson = objectMapper.writeValueAsString(logObj);
logger.info("类名: {}, 方法名: {}, 返回值: {}",
new Object[] { className, methodName, resultJson });
return obj;
}

}

posted @ 2016-08-22 14:06  蔡昊  阅读(161)  评论(0编辑  收藏  举报