切面主要用来对一些公共的模块进行切面处理,即是对还没有进入接口之前的请求进行拦截,可以单独针对某个接口,也可以单独针对某个类,下面示例代码为单独针对某个类进行的切面拦截:
package com.mooc.house.user.config.com.mooc.house.user.aspect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mooc.house.user.common.RestResponse;
import com.mooc.house.user.model.User;
import com.mooc.house.user.service.UserService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 org.springframework.web.servlet.mvc.condition.RequestConditionHolder;
import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @ClassName UserAspect
* @Description 对某个类做切面处理,访问到这个类的接口全部做处理
* @Author mischen
* @Date 2022/6/2 0022 19:47
* @Version 1.0
**/
@Component
@Aspect
public class UserAspect {
private static final Logger log = LoggerFactory.getLogger(UserAspect.class);
@Autowired
private UserService userService;
//加载特定的类
@Around("execution(* com.mooc.house.user.controller.UserController.*(..))")
public Object beforeCheck(ProceedingJoinPoint pc) throws Throwable{
//假設这里从公共的地方进行取数
User user = user = userService.getUserById(null);
HttpServletResponse response =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
if (user == null){
RestResponse returnStr = new RestResponse(-1,"该用户不存在");
String str = parseObjectStr(returnStr);
returnResponse(response,str);
log.error("该用户不存在");
return null;
}
return pc.proceed();
}
private static String parseObjectStr(Object obj){
try{
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper.writeValueAsString(obj);
} catch (Exception e){
log.error("parseObjectStr转字符串发生异常:",e);
return "";
}
}
private static void returnResponse(HttpServletResponse response,String json){
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
try{
writer = response.getWriter();
writer.print(json);
} catch (Exception e){
log.error("returnResponse调用发生异常:",e);
} finally {
if(writer!=null){
writer.close();
}
}
}
}