If you want to monitor all the ways to enter controller, Mengxin is not very good at it.
wants to monitor all methods that enter controller, but the aop class written by myself doesn"t work
tried to do it using the profile method and the annotation method, but did not enter the method.
related codes
package com.detain.system.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.detain.system.service.SystemService;
@Component
@Aspect
public class OperationRecordLog {
@Autowired
private SystemService systemService;
@Around(value = "execution(* com.detain.*.action.*.*(..))")
public Object exec(ProceedingJoinPoint invocation) throws Throwable {
Object result = invocation.proceed();
String name = invocation.getSignature().getName();
String args = invocation.getArgs().toString();
return result;
}
}
wants to monitor all the methods that enter the controller. After execution, record the relevant parameters, but after running the program, the exec
method has never been executed. I would like to ask how to modify it.
maybe it is more appropriate to use spring interceptor to do this
such as
package com.vaannila.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler. HandlerInterceptorAdapter;
public class LoggerInterceptor extends HandlerInterceptorAdapter {
static Logger logger = Logger.getLogger(LoggerInterceptor.class);
static{
BasicConfigurator.configure();
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
logger.info("Before handling the request");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
logger.info("After handling the request");
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
logger.info("After rendering the view");
super.afterCompletion(request, response, handler, ex);
}
}
configure
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="viewResolver" class="org.springframework.web.servlet.view. InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
<bean id="handlerMapping" class="org.springframework.web.servlet.handler. BeanNameUrlHandlerMapping" p:interceptors-ref="loggerInterceptor" />
<bean id="loggerInterceptor" class="com.vaannila.interceptor.LoggerInterceptor" />
<bean id="userService" class="com.vaannila.service.UserServiceImpl" />
<bean name="/userRegistration.htm" class="com.vaannila.web.UserController" p:userService-ref="userService" p:formView="userForm" p:successView="userSuccess" />
agent Monitoring , not just Controller
Oh, but I only demonstrate how to monitor mysql
, you can try to monitor Controller
. All ready, just write the cases directly to mysql
.
the problem is solved in two steps:
1. Make sure that AOP is properly configured and can achieve faceted functions: this section can be found in spring's official documentation: spring-framework-reference [AOP chapter]
2. How to write the intercept annotations when entering the controller method: the idea is as follows. You can intercept through the package path or through @ RequestMapping annotations. Reference: spring-framework-reference [how to declare crosscutting points]