1: Classe d'entité logarithmique
classe publique syslog {/ ** * / id entier privé; / ** Log Description * / Private String Description; / ** Méthode d'exécution * / méthode de chaîne privée; / ** Type de journal 0: journal d'opération; 1: Journal d'exception * / private entier logtype; / ** Adresse IP demandée par le client * / Private String requestIP; / ** Code d'exception * / Private String ExceptionCode; / ** Détails de l'exception * / Private String exceptionDetail; / ** Paramètres de demande * / Params de chaîne privées; / ** Opérateur * / private String createby; / ** Temps de fonctionnement * / chaîne privée CréationDate; public Integer getID () {return id; } public void setid (INGER ID) {this.id = id; } public String getDescription () {return Description; } public void setDescription (String Description) {this.description = Description; } public String getMethod () {return Method; } public void setMethod (méthode de chaîne) {this.method = méthode; } public entier 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 CreateDate; } public void setCreatEdate (String CreateDate) {this.createdate = CreateDate; }}2: Le pot requis par Maven
<dependency> <proupId> org.AspectJ </proupId> <Artifactid> AspectJrt </Retifactid> <Dersion> 1.7.4 </preffen> </Dependency> <Dedency> <ProupID> Org.Aspectj </ GroupId> <Artifactid> Aspectjwweaver </ Artifactid> <version> 1.7.4 </DERNIERSE> </Dependance> <GroupId> CGLIB </rombandId> <ArtifACTID> CGLIB </REFACTID> <DERVIÈRE> 2.1_3 </ Version> </Dependency> <Dedidency> <ProupID> Org.SpringFramework </proupId> <Artefactive> Spring-AOP </ Artifactid> <Derson> 4.2.5.release </Dection> </Dependency>
Le projet est nécessaire pour utiliser JDK1.7
3: Springservlet-Mvc.xml
<! - Proxy-Target-Class = "True" Force l'utilisation du proxy CGLIB. Si FALSE, Spring sélectionnera automatiquement -> <aop: aspectj-autopproxy proxy-target-class = "true" />
L'ajout de proxy-Target-Class = "true" consiste à intercepter les méthodes du contrôleur.
4: Définissez la section, j'écris principalement des pré-notations et des notifications d'exception ici
Vous trouverez ci-dessous l'annotation personnalisée
Importer java.lang.annotation. *; @ Target ({elementType.Parameter, elementType.Method}) @retention (RetenderPolicy.runtime) @Documented Public @Interface Log {/ ** Le type d'opération à effectuer, tel que: Ajouter l'opération ** / public String OperationType () Default ""; / ** L'opération spécifique à effectuer, telle que: Ajouter un utilisateur ** / public String operationName () par défaut "";}Secouer le visage
Importer java.lang.reflect.method; import java.text.simpledateformat; import java.util.arrays; import java.util.date; import javax.annotation.resource; import javax.servlet.http.httpsserversession; importer javax.servlet.http.httpssion; org.aspectj.lang.joinpoint; import org.aspectj.lang.proceedingjoinpoint; import org.aspectj.lang.annotation.after; import org.aspectj.lang.annotation.afterreturning; import org.aspectj.lang.annotation.afterthrowing; import org.aspectj.lang.annotation.around; org.aspectj.lang.annotation.aspect; import org.aspectj.lang.annotation.before; import org.aspectj.lang.annotation.pointcut; import org.slf4j.logger; important org.slf4j.logger org.springframework.web.context.request.requestContexTholder; import org.springframework.web.context.request.servletRequestAttributes; import com.gtcity.user.model.syslog; import com.gtcity.user.Model.syssuser; Import; com.gtcity.user.service.syslogService; / ** * @author panliang * @version Création Temps: 2017-3-31 * @descs Point-Cut Class * * / @ Aspect @ ComponentPublic Class SystemLogaspect {// Inject Service pour sauver les journaux de la base de données @Resource Syslogs Sysservice SystemLogService; Logger final statique privé = loggerfactory.getLogger (SystemLogaSpect. Classe); // Contrôleur Couche Tangent Point // Le premier * représente tous les types de valeur de retour // Le second * représente toutes les classes // Le troisième * représente toutes les méthodes de la classe // le dernier ... représente tous les paramètres. @PointCut ("EXECUTION (* com.gtcity.web.Controller .. *. * (..))") public void ControlleraSpect () {} / ** * * @author: Panliang * @time: 2017-3-31 2:22:16 PM * @param joinpoint point-cut * @Description: prénotification est utilisée pour intercepter la manche à la courroie * @Before("controllerAspect()") public void doBefore(JoinPoint joinPoint) {/* System.out.println("============================================================================== System.out.out.info ("avant" + jointure);} * / httpServleRequest request = (ServLetRequestAtTributes) Session.getAttribute ("User"); jointure.getSignature (). GetName (); Method.getParameterTypes (); System.out.println ("========== CONTRÔLER PRE-NOTICE START ============); System.out.println (" Méthode de la demande: "+ (joinpoint.getTarget (). GetClass (). GetName () +". "+". System.out.println ("Method Description:" + OperationName); Log.SetDescription (Operation); Log.SetExceptionDetail (null); SystemLogService.insert (log); @Author: Panliang * @time: 2017-3-31 2:24:36 PM * @param joinpoint point-cut * @Description: la notification d'exception est utilisée pour intercepter et enregistrer le journal d'exception * / @afterthrowing (PointCut = "ControlleraSpect ()", lances = "e") public doafterthrowing (joinpoint joinpoint, throwable e) {hTTSerSerflest = request) (ServletRequestAtTributes) Utilisateur ");} // String IP demandé ip = request.getReMoteAdDr (); String Params =" "; if (joinppoint.getargs ()! = null && joinppoint.getargs (). Length> 0) {params = arrays.tostring (joinTpoint.getArgs ());} try {String TargetName = jointure.getTarget (). GetClass (). GetName (); if (méthode.getName (). / * =============. start======================================================================================= ==================================================================================================. ==================================================================================================. ==================================================================================================. System.out.println ("Informations d'exception:" + e.getMessage ()); System.out.println ("demandeur:" + user.getUsername ()); Log.SetDescription (Operation); "()"); System.out.println ("======== Notification d'exception end =========);} catch (exception ex) {// enregistrer l'exception locale logger.error (" == notification exception exception == "); Logger.Error (" Informations d'exception: {} ", ex.getMessage ();} // ============= Log =========== Logger.Error ("Méthode d'exception: {} Code d'exception: {} Informations d'exception: {} Paramètres: {}", joinTPoint.getTarget (). GetClass (). GetName ().5: Dans le contrôleur
/ ** * Trouvez le mot de passe basé sur le nom d'utilisateur pour déterminer si le nom d'utilisateur et le mot de passe sont corrects * @Author Panliang * @param request * @param réponse * @throws ioException * / @ requestmapping ("/ skippage.do") @ log (operationtype = "select operation:", operationname = "user Login") skippage (requête HttpServletRequest, réponse httpservRESponse) lève ioException {ModelandView result = null; String username = request.getParameter ("e-mail"); String password = request.getParameter ("mot de passe"); int flag = systerservice.login (request, nom de mot de passe); if (drap ModelandView ("redirect: /login/dispacher_main.do");} else if (flag == 2) {// le nom d'utilisateur n'existe pas de résultat = new ModelandView ("redirect: /login/login.do? Errorcode = 1");} else {// mot de passe est un résultat incorrect = new ModelandView ("redirect: /login/login.do? Errorcode = 2");} Retour Résultat;}Pour ceux qui veulent connaître les trois autres notifications, veuillez vous référer à cet article de blog: Cliquez pour ouvrir le lien
De cette façon, lorsque l'utilisateur accède à l'arrière-plan, il y aura des enregistrements, qu'il s'agisse d'une base de données d'accès ou de bogue normale.
La méthode d'annotation AOP ci-dessus pour implémenter la gestion globale des journaux est tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.