1: Kelas Log Entitas
Syslog kelas publik { / *** / id integer privat; / ** Deskripsi Log*/ Deskripsi String Pribadi; / ** Metode Eksekusi*/ Metode String Privat; /** Jenis Log 0: Log Operasi; 1: Log Pengecualian*/ LogType Integer Pribadi; / ** Alamat IP yang diminta oleh klien*/ permintaan string privat; / ** Kode Pengecualian*/ Private String ExceptionCode; / ** Rincian Pengecualian*/ Private String ExceptionDetail; / ** Parameter Permintaan*/ Private String Params; / ** operator*/ string privat createBy; / ** Waktu operasi*/ string pribadi dibuat; Integer publik getId () {return id; } public void setid (integer id) {this.id = id; } public String getDescription () {return description; } public void setDescription (deskripsi string) {this.description = description; } public String getMethod () {return Method; } public void setMethod (Metode String) {this.method = metode; } public integer getLogType () {return logType; } public void setLogType (integer logType) {this.logType = logType; } public string getRequestip () {return revandIp; } public void setRequestip (String requestip) {this.requestip = requestip; } public String getExceptionCode () {return ExceptionCode; } public void setExceptionCode (String ExceptionCode) {this.excepticode = 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 dibuat) {this.createdate = createdate; }}2: Jar yang dibutuhkan oleh Maven
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.7.4</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.7.4</version> </dependency> <dependency> <groupid> CGLIB </groupId> <ArTifactId> cglib </artifactid> <version> 2.1_3 </version> </dependency> <dependency> <groupid> org.springframework </groupid> <ArtifactId> Spring-aop </artifactid> </Versi 4.2.5..RoLEASE </Versi> </Versi> </Versi> </ArtifactId> </Versi </Versi </Versi> </Versi> </Versi> </Versi> </Versi> </Versi> </Versi> </Versi> </Versi> </Versi> </Versi> </Versi> </Versi </Versi>.
Proyek ini diharuskan menggunakan JDK1.7
3: SpringServlet-Mvc.xml
<!-proxy-target-class = "true" memaksa penggunaan proxy cglib. Jika false, Spring akan secara otomatis memilih-> <AOP: AspectJ-autopproxy proxy-target-class = "true"/>
Menambahkan proxy-target-class = "true" adalah untuk mencegat metode dalam pengontrol.
4: Tentukan bagian, saya terutama menulis pra-notasi dan pemberitahuan pengecualian di sini
Di bawah ini adalah anotasi khusus
Impor java.lang.annotation.*; @target ({{elementType.parameter, elementType.method}) @retention (retentionPolicy.runtime) @documented public @interface log {/ ** Jenis operasi yang akan dilakukan, seperti: Tambahkan operasi*/ Operasi string publik () default ""; / ** Operasi spesifik yang akan dilakukan, seperti: tambahkan pengguna **/ public string OperationName () default "";}Potongan wajah
impor java.lang.reflect.method; import java.text.simpledateFormat; impor java.util.arrays; impor java.util.date; impor javax.annotation.Resource; impor javax.http.httppservlet; org.aspectj.lang.joinpoint; impor org.aspectj.lang.proedingjointpoint; impor org.aspectj.lang.annotation.after; impor org.aspectj.lang.annotation.afterreturning; impor org.aspectj.Lang.annotation.AfterThrowing; org.aPoroids; org.aspectj.lang.annotation.aspect; impor org.aspectj.lang.annotation.Before; impor org.aspectj.lang.annotation.pointcut; import org.slf4j.logger; impor org.slf4j.loggerFactory; impor org.sperperfram.slf4j.loggerFactory; impor org.springfringfringfring.slf4j.loggerFactory; impor org.sperpringfringfram.slf4j.loggerFactory; impor org.springfringfringfring.slf4j.loggerFactory; impor org.springfringfringfring.slf4j.loggerFactory; impor org.springfringfringfring. org.springframework.web.context.request.requestcontextholder; impor org.springframework.web.context.request.servletrequestattribute; import com.gtcity.user.model.syslog; impor com.gtcity.user.user.model.syslog; impor com.gtcity.user.user.model.syslog; com.gtcity.user.service.SysLogService;/** * @author panliang * @version Creation time: 2017-3-31 * @desc Point-cut class* */@Aspect@Componentpublic class SystemLogAspect {//Inject Service to save the logs to the database @Resource private SysLogService systemLogService; private static final Logger Logger = LoggerFactory.getLogger (SystemLogaspect. Kelas); // Controller Layer Tangent Point // Yang pertama * mewakili semua jenis nilai pengembalian // yang kedua * mewakili semua kelas // yang ketiga * mewakili semua metode kelas // yang terakhir ... mewakili semua parameter. @Pointcut("execution (* com.gtcity.web.controller..*.*(..))") public void controllerAspect() { } /** * * @author: panliang * @time: 2017-3-31 2:22:16 pm * @param joinPoint point-cut * @description: Pre-notification is used to intercept the controller layer to record the user's operations*/ @Before ("controlleraspect ()") public void dobefore (gabungan joinpoint) {/* System.out.println("============================================================================== System.out.out.info("before " + joinPoint); }*/ HttpservletRequest request = ((servletRequestAttributes) requestContextholder.getRequestAttributes ()). GetRequest (); User.setusername (pengguna yang tidak terdaftar "); Class.forname (TargetName); method.getAnnotation (log.class) .OperationType (); Start ==============); System.out.println ("Pemohon:" + User.getUserName ()); LOG.SetMethod ((joinpoint.getTarget (). getClass (). getName () + "." + joinpoint.getSignature (). GetName () + "()") + ". Log.setParams (NULL); System.out.println ("======== Controller pre-notification end ======"); @time: 2017-3-31 2:24:36 pm * @param joinPoint point-cut * @description: Exception notification is used to intercept and record exception log*/ @AfterThrowing(pointcut = "controllerAspect()", throwing="e") public void doAfterThrowing(JoinPoint joinPoint, Throwable e) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextholder.getRequestAttributes ()). GetRequest (); ip = request.getRemoteAddr (); joinpoint.getSignature (). GetName (); method.getParametertypes (); System.out.println ("================ Pemberitahuan Pengecualian mulai =========================================================================================================================== ================================================================================================================================================================== ================================================================================================================================================================== ================================================================================================================================================================== System.out.println ("Informasi Pengecualian:" + E.GetMessage ()); OperationName); log.setDescription (OperationName); "))); System.out.println ("======== Pemberitahuan Exception End ==========);} Catch (Exception Ex) {// Catat Lokal Lokal Logger.Error (" == Pengecualian Pengecualian Exception == "); Logger.Error (" Informasi Pengecualian: {} ", ex.getingage () () (); Informasi Pengecualian: {{}", ex.getsage () (); Log Exception ============= Logger.Error ("Metode Pengecualian: {} Kode Pengecualian: {} Informasi Pengecualian: {} Parameter: {}", getpoint.getTarget (). GetNameage (). GetName () + goinpoint.getSignature (). GetNameage () (). GetName (). params);}}5: Di pengontrol
/** * Temukan kata sandi berdasarkan nama pengguna untuk menentukan apakah nama pengguna dan kata sandi benar * @author panliang * @param permintaan * @param response * @throws ioException */ @requestMapping ("/skippage.do") @login (OperationType = "Pilih Operasi:", OperationName = "User Login") // Note ini: Jika ini: jika ini tidak ada publikasi: " Skippage (permintaan httpservletRequest, respons httpservletResponse) melempar ioException {modelAndView result = null; string username = request.getParameter ("email"); string password = request.getParameter ("kata sandi"); flag = sysuserservice.login (request, usernameter ("kata sandi"); flag = sysuSuSerService.login (request, USERNOMETL ModelAndView ("Redirect: /Login/dispacher_main.do");} else if (flag == 2) {// Nama pengguna tidak ada result = new ModelAndView ("Redirect: /login/login.do? ErrorCode = 1");} lain {// Kata sandi yang salah = Hasil yang salah = ModelAndView ("Redirect: /Login/Login.do? ERRORCODE = 2");} hasil pengembalian;}Bagi mereka yang ingin tahu tentang tiga pemberitahuan lainnya, silakan merujuk ke posting blog ini: Klik untuk membuka tautan
Dengan cara ini, ketika pengguna mengakses latar belakang, akan ada catatan apakah itu akses normal atau database bug.
Metode anotasi AOP di atas untuk mengimplementasikan manajemen log global adalah semua konten yang telah saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.