1: clase de entidad de registro
clase pública syslog { / *** / private entero id; / ** Descripción del registro*/ Descripción de la cadena privada; / ** Método de ejecución*/ Método de cadena privada; /** Tipo de registro 0: Registro de operaciones; 1: registro de excepción*/ privado entero logType; / ** Dirección IP solicitada por el cliente*/ String private String requestip; / ** Código de excepción*/ private String ExceptionCode; / ** Detalles de excepción*/ String private ExceptionDetail; / ** Parámetros de solicitud*/ parámetros de cadena privada; / ** operador*/ private String createBy; / ** Tiempo de operación*/ Cadena privada creatado; public Integer getId () {return id; } public void setid (ID de entero) {this.id = id; } public String getDescription () {return Descripción; } public void setDescription (String Descripción) {this.description = Descripción; } public String getMethod () {Método de retorno; } public void setMethod (método de cadena) {this.method = método; } public Integer getLogType () {return logType; } public void setLogType (Integer logType) {this.logType = logType; } public String getRequestip () {return requestIP; } public void setRequestip (String requestip) {this.requestip = requestip; } public String getExceptionCode () {return ExceptionCode; } public void setExceptionCode (String ExceptionCode) {this.ExceptionCode = ExceptionCode; } public String getExceptionDetail () {return exceptionDetail; } public void setExceptionDetail (String ExceptionDetail) {this.ExceptionDetail = ExceptionDetail; } public String getParams () {return Params; } public void setParams (String Params) {this.Params = params; } public String getCreateBy () {return createBy; } public void setCreateBy (string createBy) {this.createBy = createBy; } public String getCreateDate () {return creatate; } public void setCreateDate (string creatateate) {this.createdate = creatateate; }}2: El frasco requerido por Maven
<Spendency> <MoupRoMID> org.spectj </groupid> <artifactId> spightJRT </artifactId> <PROPELLACIÓN> 1.7.4 </Versión> </pendency> <Spendency> <MoupRupid> org.aspectj </proupId> <AtifactId> AspectJWeAver </artifactId> <ROLELA> 1.7.4 </Version> </spendency> <MoupRid> cglib </groupid> <artifactid> cglib </artifactid> <verserse> 2.1_3 </verversion> </pendency> <pendency> <grupoD> org.springframework </proupid> <artifactID> spring-aop </artifactid> <version> 4.2.5.Release </versewer> </pontion> <pendency>
Se requiere que el proyecto use JDK1.7
3: Springservlet-Mvc.xml
<!-proxy-Target-Class = "True" Force el uso del proxy CGLIB. Si False, Spring seleccionará automáticamente-> <AOP: SuppectJ-AutopProxy Proxy-Target-Class = "True"/>
Agregar proxy-Target-Class = "True" es interceptar los métodos en el controlador.
4: Defina la sección, escribo principalmente notificaciones previas y excepciones aquí
A continuación se muestra la anotación personalizada
import java.lang.annotation.*; @target ({elementtype.parameter, elementtype.method}) @retention (retentionPolicy.runtime) @documented public @interface log {/ ** El tipo de operación que se realizará, como: Agregar operación **/ public String OperationType () predeterminado "; / ** La operación específica que se realizará, como: Agregar usuario **/ public String operationName () predeterminado "";}Cortador de la cara
import java.lang.reflect.method; import java.text.simpledateFormat; import java.util.arrays; import java.util.date; import javax.annotation.resource; import javax.servlet.http.tttpservletRequest; import javax.servlet.servlet org. org. org.springframework.web.context.request.requestContexTholder; import org.springframework.web.context.request.servletrequestattributes; import com.gtcity.user.model.syslog; import com.gtcity.user.model.sysuser; import; com.gtcity.user.service.syslogservice;/** * @author Panliang * @Version Creation Time: 2017-3-31 * @Desc Point-Cut Class * */ @Aspecto @ComponentPublic SystemloGeSpect {// Servicio de inyección para guardar los registros en la base de datos @Reseurce Private Syslogservice SystemlogSEpsect; Private static final logger logger = loggerFactory.getLogger (SystemLogaspect. Class); // Punto de tangente de la capa del controlador // El primer * representa todos los tipos de valor de retorno // El segundo * representa todas las clases // El tercero * representa todos los métodos de la clase // El último ... representa todos los parámetros. @PointCut ("Ejecution (* com.gtcity.web.controller ..*.* (..))") public void controleraSpect () {} /**** @author: panliang* @time: 2017-3-31 2:22:16 PM* @param unión de punto @Description: pre-Notificación se usa a la interfección del controlador del controlador de control de control de control de los controles* @Param* @Before("controllerAspect()") public void doBefore(JoinPoint joinPoint) {/* System.out.println("============================================================================== System.out.out.info ("antes" + unión); session.getAttribute ("User"); unket.getSignature (). GetName (); Method.getParametertypes (); System.out.println ("=========== Controlador Pre-Notice Start =============); System.out.Println (" Solicitar método: " + (unePoint.getTarget (). GetClass (). GetNameTypeType); System.out.println ("Descripción del método:" + OperationName); log.setMethod ((unkePoint.getTarget (). GetClass (). GetName () + ". Log.SetParams (NULL); System.out.println ("======== PRE-NOTIFICACIÓN DEL CONTROLLADO 2017-3-31 2:24:36 PM * @param unión de punto de punto * @Description: la notificación de excepción se usa para interceptar y registrar el registro de excepciones */ @Afterthrowing (punto = "controlerSpect ()", showing = "e") public void doAfterThrowing (unión de unión de unión, lanzable e) {httpserveRetRequest request = (((servTetReTretTointPoint) RequestContexTholder.getRequestAtTributs ()). GetRequest (); ip = request.getRemoteAddr (); unket.getSignature (). GetName (); Method.getParametTypes (); System.out.println ("================= Notificación de excepción start======================================================================================= ==================================================================================================================================================== ==================================================================================================================================================== ==================================================================================================================================================== System.out.println ("Información de excepción:" + E.getMessage ()); System.out.println ("Requester:" + user.getusername ()); log.setExceptionCode (e.getClass (). getName ()); log.setParams (params); System.out.println ("======== Notificación de excepción end =========);} Catch (Exception Ex) {// Registro de excepción local de excepción logger.error (" == Notificación de excepción excepción == "); logger.error (" Información de excepción: {} ", ex.getMessage ();} // ============ LOG ============ Logger.error ("Método de excepción: {} Código de excepción: {} Información de excepción: {} parámetros: {}", unePoint.getTarget (). getClass (). getName () + ungePoint.getSignsign ().5: En el controlador
/** * Encuentre la contraseña basada en el nombre de usuario para determinar si el nombre de usuario y la contraseña son correctos * @author Panliang * @param request * @param respuesta * @throws ioexception */ @requestmapping ("/skippage.do") @log (operationType = "Seleccione Operación:", OperationName = "User login") //: si esto no se agrega, el registro de este Método se inserta este METODO METODE METODE. Skippage (httpservletRequest solicitud, respuesta httpServletResponse) lanza IOException {modelandView result = null; string username = request.getParameter ("correo electrónico"); string contraseña = request.getParameter ("contraseña"); int flag = sysUsUserService.login (request, username, contraseña); if (flag == 1) ModelandView ("redirect: /login/dispacher_main.do");} else if (flag == 2) {// El nombre de usuario no existe resultado = nuevo modelandView ("redirect: /login/login.do? ErrorCode = 1");} Else {// Contraseña es incorrecto Resultado = nuevo nuevo resultado = new New New = New Newin New ModelandView ("redirect: /login/login.do? ErrorCode = 2");} Resultado de retorno;}Para aquellos que quieran saber sobre las otras tres notificaciones, consulte esta publicación de blog: haga clic para abrir el enlace
De esta manera, cuando el usuario accede a los antecedentes, habrá registros si es acceso normal o base de datos de errores.
El método de anotación AOP anterior para implementar la gestión global de registros es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.