السيناريوهات المستخدمة من قبل AOP في المشاريع الفعلية هي بشكل أساسي إدارة السلطة وإدارة المعاملات وإدارة الأمن وتسجيلها وتصحيح الأخطاء.
تنبع المشكلة من تطوير المشروع
في الآونة الأخيرة ، هناك حاجة إلى وحدة إدارة الإذن في المشروع. وفقًا لنهج الزميل السابق ، فإن إصدار أحكام منطقية قبل كل واجهة في مكالمة طبقة وحدة التحكم. لا حرج في القيام بذلك ، لكن معدل تكرار الكود مرتفع للغاية ، وهو عمل بدني. لذلك ، كما هو مذكور في العنوان ، استخدم Spring AOP لإقامة نقطة شق لتحقيق الإذن لإدارة الوظائف العامة ، مما يقلل من قابلية التطوير اللاحق للمشروع.
ملفات تنفيذ الرمز والتكوين لإدارة الإذن
مع الحد الأدنى لدرجة تعديل الكود ، فإن AOP هو بلا شك الخيار المثالي. هناك العديد من الأذونات في المشروع ، والتعقيد المنطقي مرتفع نسبيًا ، لذلك سنأخذها خطوة بخطوة. نظرًا لأن الأذونات تتضمن مكالمات إلى واجهة الواجهة الخلفية ، يختار المؤلف إنشاء قسم في رمز طبقة التحكم ، ونقطة الظل هي كتل الأسلوب المختلفة في وحدة التحكم. لأذونات الوصول العامة ، نستخدم تعبير التنفيذ لاستبعادها.
تنفيذ أذونات المسؤول للقراءة فقط واختيار النقاط
بالنسبة لوحدة التحكم التي تنفذ الاستبعاد العام ، يستخدم المؤلف عملية تعبير التعبير عن التنفيذ. نظرًا لأن المسؤول عن القراءة فقط لديه أذونات قراءة عالمية ، ولأذونات إضافة وحذف وتعديل ، يستخدم المؤلف طريقة إضافة وحذف وتعديل باستخدام نقاط النقاط. لذلك ، فإن تسمية الطريقة الموحدة مهمة للغاية في هذا الوقت. بالنسبة للعديد من المسؤولين الذين تتفاقم مع المسؤولين للقراءة فقط ، يمكننا إصدار أحكام خاصة في القانون. فيما يلي طريقة تكوين ملف التكوين لـ Spring AOP.
<bean id = "userperMissionsAdvice" /> <aop: config> <!-تحديد القسم-> <aop: appleted id = "authaspect" ref = "userpermissionsadvice"> <!-تحديد نقطة الدخول (تم تكوينه تحت com.thundersoftadata.web.controller.*. edit*(..) com.thundersoft.metadata.web.controller.*. edit*(..)) أو التنفيذ (*com.thundersoft.metadata.web.controller.*. edit*(..)) أو التنفيذ (*com.thundersoft.metadata.web.controller.*. del*(..) com.thundersoft.metadata.web.controller.*. تحديث*(..)) أو التنفيذ (*com.thundersoft.metadata.web.controller.*. com.Thundersoft.metadata.web.controller.*. Down*(..)))) و (! التنفيذ (*com.thundersoft.metadata.web.controller.findpasswordcontroller.*(..)) com.thundersoft.metadata.web.controller.homecontroller.*(..)) و! التنفيذ (*com.thundersoft.metadata.web.controller.userstatuscontroller.*(..)) ! التنفيذ (* com.thundersoft.metadata.web.controller.dashboardController.* (..)) و! التنفيذ (* com.thundersoft.metadata.web.controller.maincontroller.* (..)))) pointcut-ref = "authpointcut"/> </aop: side> </ aop: config>
تنفيذ رمز إدارة الإذن القراءة فقط
لقد قلت الكثير أعلاه ، ولن أقول الكثير من الهراء. فيما يلي تطبيق رمز مقطع يتحكم في أذونات القراءة فقط وأذونات مركبة مختلفة.
/*** يتم إجراء حكم اعتراض AOP على المسؤولين للقراءة فقط ومسؤوليهم المركبة. * Param Joinpoint Point. * throws ioException * / public void readonly (JoinPoint JoinPoint) يلقي ioException { / ** * الحصول على الطريقة المعتادة. */ string methodName = JoinPoint.getSignature (). getName () ؛ /*** احصل على الكائن المعترض. */ Object = JoinPoint.getTarget () ؛ logger.info ("إدارة الإذن AOP ، اسم الطريقة" + methodName) ؛ طلب httpservletrequest = ((servletRequestAttRibutes) requestContextholder.getRequestatTributes ()). getRequest () ؛ httpservletresponse استجابة = (servletRequestAttributes) requestContextholder.getRequestatTributes ()). getResponse () ؛ String Roleflag = getLoginuserInfor.getLoginusErorole (request) ؛ / *** Super Administrator*/ if (PercisionSlabeled.super_admin.equals (rolflag)) {return ؛ } / *** حكم المسؤولين للقراءة فقط لإجراء تغييرات على البيانات على الأذونات* / if (أذونات labeled.reader_admin.equals (rolflag)) {logger.error ("القراءة لا يوجد إذن للتشغيل!") ؛ Response.sendRedirect (request.getContextPath () + "/auth/endonly") ؛ } / ** * مسؤول القسم ، وهو مسؤول للقراءة فقط ، * / if (أذونات abeled.dept_reader_admin.equals (rolflag)) {if (Object exateOfcontroller) {return ؛ } if (Object extorlyof UserController) {if (methodname.contains ("addadmin")) {desponse.sendRedirect (request.getContextPath () + "/auth/readonly") ؛ } if (methodname.contains ("deleteadmin")) {response.sendRedirect (request.getContextPath () + "/auth/readonly") ؛ } if (methodname.contains ("updateadmin")) {response.sendRedirect (request.getContextPath () + "/auth/readonly") ؛ } if (methodname.contains ("updateadmin")) {response.sendRedirect (request.getContextPath () + "/auth/readonly") ؛ } if (methodname.contains ("updateadmin")) {response.sendRedirect (request.getContextPath () + "/auth/readonly") ؛ } يعود؛ } if (Object extryof groupController) {return ؛ } logger.error ("مسؤول القسم ، وليس لأذونات التشغيل لمسؤول القراءة فقط!") ؛ Response.sendRedirect (request.getContextPath () + "/auth/endonly") ؛ } / *** مسؤول التطبيق ، ومسؤول القراءة فقط* / if (أذونات labeled.app_reader_admin.equals (roblag)) {if (Object extallof appController) {return ؛ } if (Object extryof AppPolicyController) {return ؛ } logger.error ("مسؤول التطبيق ، وليس لأذونات التشغيل لمسؤول القراءة فقط!") ؛ Response.sendRedirect (request.getContextPath () + "/auth/endonly") ؛ } / *** مسؤول القسم ، ومسؤول التطبيق ، ومسؤول القراءة فقط* / if (أذونات abeled.dept_app_reader_admin.equals (rolflag)) {if (Object extorlyof departmentcontroller) {return ؛ } if (Object eastyof UserController) {return ؛ } if (Object extryof groupController) {return ؛ } if (Object extryof AppController) {return ؛ } if (Object extryof AppPolicyController) {return ؛ } logger.error ("مسؤول القسم ، ومسؤول التطبيق ، والمسؤول للقراءة فقط ليس لديهم أذونات تشغيل") ؛ Response.sendRedirect (request.getContextPath () + "/auth/endonly") ؛ }}اختيار النقاط مع التحكم في امتياز المسؤول المخصص
نظرًا لأنه من المميز تمامًا أن يكون لديك حقوق مسؤول خاصة ، يستخدم المؤلف وحدة التحكم بالإضافة إلى حقوق الوصول العامة. في الظروف الخاصة ، يمكن تنفيذها في منطق الكود. رمز ملف التكوين كما يلي:
<aop: config> <!-حدد القسم-> <aop: appleted id = "authaspect" ref = "userpermissionsadvice"> <!-حدد نقطة الدخول (تم تكوينه تحت com.thundersoft.metadata.web.controller قبل أن يتم استدعاؤه)-> <aop: pointcut التعبير = "(التنفيذ (*. com.thundersoft.metadata.web.controller.*.* com.thundersoft.metadata.web.controller.selfserviceController.*(..)) و! التنفيذ (*com.thundersoft.metadata.web.controller.homecontroller.*(..) و! execution (*com.thundersofta.metadata.web.web.wontroller. ! التنفيذ (* com.thundersoft.metadata.web.controller.dashboardcontroller.* (..)) و! التنفيذ (* com.thundersoft.metadata.web.controller.dashboardcontroller.* (..)) و! التنفيذ (** com.thundersoft.metadata.web.controller.maincontroller.*(..))))) "id =" appauthPointCut "/> <!-تنفيذ قبل أن يتم استدعاء الطريقة-> <aop: قبل method =" appdeptauth "pointcut-ref =" appauthpointcut "/>
## تنفيذ رمز العنوان لإدارة الإذن
/*** إصدار حكم تعسفي على مسؤول الطلب ومسؤول القسم. * Param Joinpoint Point. * throws ioException * / public void appdeptauth (JoinPoint JoinPoint) يلقي ioException { / ** * الحصول على الطريقة المعتادة. */ string methodName = JoinPoint.getSignature (). getName () ؛ /*** احصل على الكائن المعترض. */ Object = JoinPoint.getTarget () ؛ logger.info ("إدارة إذن AOP ، اسم الطريقة" ، methodName) ؛ طلب httpservletrequest = ((servletRequestAttRibutes) requestContextholder.getRequestatTributes ()). getRequest () ؛ httpservletresponse استجابة = (servletRequestAttributes) requestContextholder.getRequestatTributes ()). getResponse () ؛ String Roleflag = getLoginuserInfor.getLoginusErorole (request) ؛ / *** Super Administrator*/ if (PercisionSlabeled.super_admin.equals (rolflag)) {return ؛ } / *** حكم مسؤولي التطبيقات لإجراء تغييرات على أذونات البيانات* / if (أذونات labeled.app_admin.equals (robleflag)) {if (Object extryof appController) {return ؛ } if (Object extryof AppPolicyController) {return ؛ } logger.error ("مسؤول التطبيق لا يوجد لديه أذونات التشغيل") ؛ Response.sendRedirect (request.getContextPath () + "/auth/endonly") ؛ } if if (أذونات labeled.dept_admin.equals (rolflag)) {if (Object extryof eartlecontroller) {return ؛ } if (Object eastyof UserController) {return ؛ } if (Object extryof groupController) {return ؛ } if ("getAllDepartments" .equals (methodName)) {return ؛ } logger.error ("مسؤول التطبيق لا يوجد لديه أذونات التشغيل") ؛ Response.sendRedirect (request.getContextPath () + "/auth/endonly") ؛ } آخر {return ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.