1: คลาสเอนทิตีบันทึก
Syslog คลาสสาธารณะ { / *** / ID จำนวนเต็มส่วนตัว; / ** บันทึกคำอธิบาย*/ คำอธิบายสตริงส่วนตัว; / ** วิธีการดำเนินการ*/ วิธีสตริงส่วนตัว; /** ประเภทบันทึก 0: บันทึกการดำเนินการ; 1: บันทึกข้อยกเว้น*/ logtype จำนวนเต็มส่วนตัว; / ** ที่อยู่ IP ที่ร้องขอโดยไคลเอนต์*/ การร้องขอสตริงส่วนตัว; / ** รหัสข้อยกเว้น*/ Private String ExceptionCode; / ** รายละเอียดข้อยกเว้น*/ Private String ExceptionDetail; / ** พารามิเตอร์คำขอ*/ พารามิเตอร์สตริงส่วนตัว; / ** ตัวดำเนินการ*/ สตริงส่วนตัว createby; / ** เวลาการทำงาน*/ สตริงส่วนตัวที่สร้างขึ้น; จำนวนเต็มสาธารณะ getId () {return id; } โมฆะสาธารณะ setId (ID จำนวนเต็ม) {this.id = id; } สตริงสาธารณะ getDescription () {return คำอธิบาย; } โมฆะสาธารณะ setDescription (คำอธิบายสตริง) {this.description = คำอธิบาย; } สตริงสาธารณะ getMethod () {วิธีการส่งคืน; } โมฆะสาธารณะ setMethod (วิธีการสตริง) {this.method = วิธี; } จำนวนเต็มสาธารณะ getLogType () {return logType; } โมฆะสาธารณะ setLogType (จำนวนเต็ม logType) {this.logType = logType; } สตริงสาธารณะ getRequestip () {return requestip; } โมฆะสาธารณะ setRequestip (requestip สตริง) {this.requestip = requestip; } สตริงสาธารณะ getExceptionCode () {return exceptionCode; } โมฆะสาธารณะ setExceptionCode (String ExceptionCode) {this.exceptionCode = ExceptionCode; } สตริงสาธารณะ getExceptionDetail () {return exceptionDetail; } โมฆะสาธารณะ setExceptionDetail (String ExceptionDetail) {this.exceptionDetail = ExceptionDetail; } สตริงสาธารณะ getParams () {return params; } โมฆะสาธารณะ setParams (พารามิเตอร์สตริง) {this.params = params; } สตริงสาธารณะ getCreateBy () {return createBy; } โมฆะสาธารณะ setCreateBy (String createBy) {this.createBy = createBy; } สตริงสาธารณะ getCreatedate () {return complementate; } โมฆะสาธารณะ setCreatedate (สตริงที่สร้างขึ้น) {this.createdate = สร้างขึ้น; -2: โถที่ต้องการโดย maven
<การพึ่งพา> <roupId> org.aspectj </groupId> <ratifactid> Appectjrt </artifactId> <Sersion> 1.7.4 </เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <roupId> org.aspectj </groupId> <ratifactid> <RoupID> CGLIB </groupID> <RatIfactId> CGLIB </artIfactId> <Sersion> 2.1_3 </เวอร์ชัน> </การพึ่งพาอาศัย> <การพึ่งพาอาศัยกัน> <roupId> org.springframework </roupid>
โครงการจำเป็นต้องใช้ JDK1.7
3: Springservlet-mvc.xml
<!-พร็อกซี-เป้าหมาย-คลาส = "จริง" บังคับให้ใช้พร็อกซี cGlib หากเป็นเท็จสปริงจะเลือกโดยอัตโนมัติ-> <aop: apectj-autopproxy proxy-target-class = "true"/>>>>
การเพิ่มพร็อกซี-เป้าหมาย-คลาส = "จริง" คือการสกัดกั้นวิธีการในคอนโทรลเลอร์
4: กำหนดส่วนฉันส่วนใหญ่เขียนการแจ้งเตือนล่วงหน้าและการแจ้งเตือนข้อยกเว้นที่นี่
ด้านล่างนี้เป็นคำอธิบายประกอบที่กำหนดเอง
นำเข้า java.lang.annotation.*; @target ({ElementType.Parameter, ElementType.Method}) @retention (RESTIONPICALY.runtime) @Documented สาธารณะ @Interface log {/ ** ประเภทของการดำเนินการที่จะดำเนินการเช่น: เพิ่มการดำเนินการ / ** การดำเนินการเฉพาะที่จะดำเนินการเช่น: เพิ่มผู้ใช้ **/ การดำเนินการสตริงสาธารณะ () ค่าเริ่มต้น "";}หน้าตัด
นำเข้า java.lang.reflect.method; นำเข้า java.text.simpledateFormat; นำเข้า java.util.arrays; นำเข้า java.util.date; นำเข้า Javax.annotation.resource; นำเข้า javax.servlet.http.httpservlequest; org.aspectj.lang.joinpoint; นำเข้า org.aspectj.lang.proceedingjoinpoint; นำเข้า org.aspectj.lang.annotation.after; นำเข้า org.aspectj.lang.annotation.Anturning; org.aspectj.lang.annotation.aspect; นำเข้า org.aspectj.lang.annotation.before; นำเข้า org.aspectj.lang.annotation.pointcut; นำเข้า org.slf4j.logger; นำเข้า org.slf4j.loggerforthory; org.springframework.web.context.request.requestcontextholder; นำเข้า org.springframework.web.context.request.servletrequestattributes; นำเข้า com.gtcity.user.model.syslog; com.gtcity.user.service.syslogservice;/** * @author panliang * @version การสร้างเวลา: 2017-3-31 * @desc class-cut class * */ @ @acition @componentpublic systemlogaspect {// inject service Logger Logger สุดท้ายคงที่ส่วนตัว = loggerFactory.getLogger (SystemLogaspect. class); // ตัวควบคุมเลเยอร์ Tangent Point // ครั้งแรก * แสดงถึงประเภทค่าคืนทั้งหมด // ที่สอง * หมายถึงคลาสทั้งหมด // ที่สาม * หมายถึงวิธีการทั้งหมดของคลาส // ล่าสุด ... แสดงถึงพารามิเตอร์ทั้งหมด @PointCut ("Execution (* com.gtcity.web.controller ..*.* (.. ))") โมฆะสาธารณะคอนโทรลเลอร์ () {} /***** @author: panliang* @time: 2017-3-31 2:22:16 PM* @param @Before ("ControllerAspect ()") โมฆะสาธารณะ Dobefore (JoinPoint JoinPoint) {/* System.out.println ("========================================================================================= System.out.info ("ก่อน" + joinpoint); Session.getAttribute ("ผู้ใช้"); joinpoint.getSignature (). getName (); clazzs = method.getParameterTypes (); System.out.println ("========== คอนโทรลเลอร์เริ่มต้นการแจ้งเตือนล่วงหน้า =============); System.out.println (" วิธีการร้องขอ: " + (joinpoint.getTarget (). getClass ()") System.out.println ("เมธอดคำอธิบาย:" การดำเนินการ Name); log.setDescription (OperationName); SetMethod ((joinpoint.gepoint.getTarget (). getClass (). getName () + ".". " log.setexceptiondetail (null); System.out.println ("======== คอนโทรลเลอร์การแจ้งเตือนล่วงหน้า ======"); 2017-3-31 2:24:36 PM * @param joinpoint point-cut * @description: การแจ้งเตือนข้อยกเว้นใช้เพื่อสกัดกั้นและบันทึกบันทึกข้อยกเว้น */ @afterthrowing (pointcut = "controlleraspect ()", throwing = "e") โมฆะสาธารณะ requestcontextholder.getrequestattributes ()). getRequest (); ip = request.getRemoteaddr (); joinpoint.getSignature (). getName (); clazzs = method.getParameterTypes (); เอาต์พุต ========*/ system.out.println ("================= การแจ้งเตือนข้อยกเว้น start ======================================================================================================== - - - System.out.println ("ข้อมูลข้อยกเว้น:" + e.getMessage ()); System.out.println ("ผู้ร้องขอ:" + user.getUserName ()); log.setDescription (OperationName); "()")); System.out.println ("======== การแจ้งเตือนข้อยกเว้นสิ้นสุด =========);} catch (Exception Ex) {// บันทึก Locam Exception Logger.error (" == ยกเว้นการแจ้งเตือนข้อยกเว้น == "); logger.error (" ข้อมูลข้อยกเว้น: {} ", ex.getMessage () log ============ logger.error ("วิธีการยกเว้น: {} รหัสข้อยกเว้น: {} ข้อมูลข้อยกเว้น: {} พารามิเตอร์: {}", JoinPoint.getTarget (). getClass (). getName ()5: ในคอนโทรลเลอร์
/** * ค้นหารหัสผ่านตามชื่อผู้ใช้เพื่อตรวจสอบว่าชื่อผู้ใช้และรหัสผ่านถูกต้อง * @author panliang * @param Request * @param Response * @throws ioexception */ @requestmapping ("/skippage.do") @log (erperationtype = "การดำเนินการ Skippage (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น ioexception {modelandView result = null; สตริงผู้ใช้ = request.getParameter ("อีเมล"); รหัสผ่านสตริง = คำขอ. getParameter ("รหัสผ่าน"); int flag = sysuserservice.login ModelAndView ("Redirect: /login/dispacher_main.do");} else ถ้า (flag == 2) {// ชื่อผู้ใช้ไม่มีผลลัพธ์ = model และ model ใหม่ ("redirect: /login/login.do? errorCode = 1"); ModelAndView ("Redirect: /login/login.do? ErrorCode = 2");} ส่งคืนผลลัพธ์;}สำหรับผู้ที่ต้องการทราบเกี่ยวกับการแจ้งเตือนอีกสามครั้งโปรดดูที่โพสต์บล็อกนี้: คลิกเพื่อเปิดลิงค์
ด้วยวิธีนี้เมื่อผู้ใช้เข้าถึงพื้นหลังจะมีการบันทึกว่าเป็นฐานข้อมูลการเข้าถึงหรือข้อผิดพลาดปกติ
วิธีการอธิบายคำอธิบายประกอบ AOP ข้างต้นเพื่อใช้การจัดการบันทึกทั่วโลกเป็นเนื้อหาทั้งหมดที่ฉันได้แบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น