日志,需要记录管理员操作日志,
这里需要传递2个参数, 文章的编号, 和 SESSION
@Aspect
@Controller
public class ControllerAopTest {
@Pointcut(
value = "execution(* net.watermelon.cms.web.PostController.*(java.lang.Integer,*,javax.servlet.http.HttpServletRequest,..)) && args(id,*,request,..)",
argNames = "id,request") //注意那个 args(id,..) 这样才能找到
private void p(Integer id,HttpServletRequest request){//此切入点的签名可以在别处调用此定义
}
@After(value="p(id,request)",argNames = "id,request")
private void afterP(JoinPoint joinPoint,Integer id,HttpServletRequest request){ //JoinPoint 放在第一个参数
UserSession userSession = (UserSession) request.getSession().getAttribute("userSession");
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
method.getName();
if(method != null) //写入库吧
{
PostAdminOpro postAdminOpro = new PostAdminOpro();
postAdminOpro.setOperDate(new Date());
postAdminOpro.setOperName(method.getAnnotation(PostLog.class).value());
postAdminOpro.setPostId(id);
postAdminOpro.setUserId(userSession.getUserLoginId());
commonManager.save(postAdminOpro);
}
}
PostController 类似这样的函数
@PostLog("保存/修改")
@RequestMapping("/savePost.do")
public String savePost(@ModelAttribute Post post, BindingResult result,
SessionStatus status, HttpServletRequest request,
HttpServletResponse response) {
@PostLog("保存/修改") 是自定义的注释
这样写:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PostLog{
String value() default "";
}