Die von AOP in tatsächlichen Projekten verwendeten Szenarien sind hauptsächlich Autoritätsmanagement, Transaktionsmanagement, Sicherheitsmanagement, Protokollierung und Debuggen.
Das Problem beruht auf der Projektentwicklung
Vor kurzem ist im Projekt ein Modul für das Erlaubnisverwaltungsmodul benötigt. Laut dem Ansatz des vorherigen Kollegen sollen logische Urteile vor jeder Schnittstelle im Aufruf der Controller -Ebene logische Urteile fällen. Es ist nichts Falsches daran, dies zu tun, aber die Code -Wiederholungsrate ist zu hoch und es ist körperliche Arbeit. Verwenden Sie also, wie im Titel erwähnt, Spring AOP, um einen Schlitzpunkt zu erreichen, um das Erlaubnismanagement allgemeiner Funktionen zu erreichen, wodurch die Skalierbarkeit der späteren Entwicklung des Projekts verringert wird.
Code -Implementierungs- und Konfigurationsdateien für die Berechtigungsverwaltung
Mit dem Mindestgrad der Codeänderung ist AOP zweifellos die ideale Wahl. Es gibt verschiedene Berechtigungen im Projekt, und die logische Komplexität ist relativ hoch, daher werden wir es Schritt für Schritt machen. Da die Berechtigungen Anrufe an die Backend -Schnittstelle beinhalten, entscheidet der Autor, einen Abschnitt im Controller -Layer -Code zu erstellen, und der Tangentenpunkt ist die verschiedenen Methodenblöcke im Controller. Für allgemeine Zugriffsberechtigungen verwenden wir den Ausdrucksausdruck, um sie auszuschließen.
Implementierung von nur schreibgeschriebenen Administratoren und Auswahl der Punktzahlen
Für den Controller, der den allgemeinen Ausschluss implementiert, verwendet der Autor die Logikoperation des Ausführungsausdrucks. Da der nur schreibgeschützte Administrator globale Leseberechtigungen und die Berechtigungen des Hinzufügens, Löschens und Änderns des Autors verwendet, verwendet der Autor die Methode zum Hinzufügen, Löschen und Ändern der Verwendung von Punkten. Die Benennung der standardisierten Methode ist zu diesem Zeitpunkt sehr wichtig. Für verschiedene Administratoren, die mit schreibgeschützten Administratoren zusammengesetzt sind, können wir im Kodex besondere Urteile fällen. Im Folgenden finden Sie die Konfigurationsdateikonfigurationsmethode von Feder AOP.
<bean id = "userSpermissionsAdvice" /> <AOP: config> <!-Definieren Sie den Abschnitt-> <AOP: Aspekt-ID = "Authaspespe" ref = "userSpermissionsAdvice"> <!-Definieren Sie den Einstiegspunkt (konfiguriert unter Com.Tersoft.Metadata.web.Controller.*. com.thundersoft.metadata.web.controller.*. edit*(..)) oder Execution (*com.thundersoft.metadata.web.controller. com.thundersoft.metadata.web.controller.*. update*(..)) oder Ausführung (*com.thundersoft.metadata.web.controller. com.Thundersoft.metadata.web.controller.*. ! Ausführung (* com.thundersoft.metadata.web.controller.homecontroller.* (..)) und! com.Thundersoft.metadata.web.controller.UtererstatusController.*(..))) und! Ausführungs (*com.Thundersoft.Metadata.Web.Controller.DashboardController.*(..)) und! ID = "AuthortePointCut"/> <!-Ausführung Bevor die Methode aufgerufen wird-> <AOP: vor method = "readonly" pointcut-ref = "AuthPointCut"/> </aoP: Aspekt> </aop: config>
Implementierter Anbieter von nur schreibgeschützten Administratoren für die Verwaltung des Verwaltungsmanagements
Ich habe so viel darüber gesagt und werde nicht viel Unsinn sagen. Im Folgenden finden Sie eine Implementierung des Abschnittscode, die schreibgeschützte Berechtigungen und verschiedene Berechtigungen kontrolliert.
/*** AOP-Abfangen-Urteilsvermögen wird an schreibgeschützten Administratoren und ihren zusammengesetzten Administratoren durchgeführt. * @param Joinpoint Einstiegspunkt. * @throws ioException * / public void readonly (joinpoint joinpoint) löst IoException { / ** * die abgefangene Methode ab. */ String methodname = joinpoint.getSignature (). GetName (); /*** Holen Sie sich das abgefangene Objekt. */ Object Object = joinpoint.gettarget (); logger.info ("Berechtigungsverwaltung AOP, Methodame" + methodName); HttpServletRequest request = ((servletRequestattributes) RequestContexTHolder.getRequestAttributes ()). GetRequest (); HttpServletResponse response = ((servletRequestattributes) RequestContexTHolder.getRequestAttributes ()). GetResponse (); String releFFLAG = getLoginUserinfor.getLoginUserrol (Anfrage); / *** Super Administrator*/ if (permissionSlabeled.super_admin.equals (Rollenflag)) {return; } / *** Das Urteil der schreibgeschützten Administratoren, um Datenänderungen an Berechtigungen vorzunehmen response.sendredirect (request.getContextPath () + "/auth/readonly"); } / ** * Abteilungsadministrator und ist ein nur schreibgeschützter Administrator, * / if (permissionSlabeled.dept_reader_admin.equals (Rollenflag)) {if (ObjectinstanceOf DepartmentController) {return; } if (ObjectinSinformof UserController) {if (methodname.contains ("addAdmin")) {response.sendRect (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"); } zurückkehren; } if (Objectinformof GroupController) {return; } logger.Error ("Abteilungsadministrator und keine Betriebsberechtigungen für den schreibgeschützten Administrator!"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } / *** Anwendungsadministrator und schreibgeschützter Administrator* / if (permissionSlabeled.app_reader_admin.equals (Rollenflag)) {if (Objectinformof AppController) {return; } if (Objektinstanz von AppPolicyController) {return; } logger.Error ("Anwendungsadministrator und keine Betriebsberechtigungen für den schreibgeschützten Administrator!"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } / *** Abteilungsadministrator und Anwendungsadministrator sowie schreibgeschützte Administrator* / if (permissionSlabeled.dept_app_reader_admin.equals (Rollenflag)) {if (Object InstanceOf DepartmentController) {return; } if (ObjectinSinformof UserController) {return; } if (Objectinformof GroupController) {return; } if (Objectinformof AppController) {return; } if (Objektinstanz von AppPolicyController) {return; } logger.Error ("Abteilungsadministrator und Anwendungsadministrator und schreibgeschützter Administrator haben keine Betriebsberechtigungen"); response.sendredirect (request.getContextPath () + "/auth/readonly"); }}Point-Cut-Auswahl mit dedizierter Administrator-Privileg-Kontrolle
Da es etwas Besonderes ist, über besondere Administratorrechte zu verfügen, verwendet der Autor den Controller zusätzlich zu den allgemeinen Zugriffsrechten. Unter besonderen Umständen kann es in der Codelogik implementiert werden. Der Konfigurationsdateicode lautet wie folgt:
<aop:config> <!--Define the section--> <aop:aspect id="authAspect" ref="usersPermissionsAdvice"> <!-- Define the entry point (configured under com.thundersoft.metadata.web.controller is intercepted before being called) --> <aop:pointcut expression="(execution(* com.Thundersoft.metadata.web.controller.*.*(..)) und (! Ausführung (*com.thundersoft.metadata.Web.Controller.FindPasswordController. com.thundersoft.metadata.web.controller.selfServiceController. ! Ausführung (* com.thundersoft.metadata.web.controller.dashboardcontroller. com.thundersoft.metadata.web.controller.MainController.*(..))))" id="appAuthPointCut"/> <!--Execute before the method is called --> <aop:before method="appDeptAuth" pointcut-ref="appAuthPointCut"/> </aop:aspect> </aop:config>
## Adresscode Implementierung der Berechtigungsverwaltung
/*** Machen Sie ein beliebiges Abfangenenurteil über den Antragsadministrator und den Abteilungsadministrator. * @param Joinpoint Einstiegspunkt. * @throws ioException * / public void AppDeptAuth (joinpoint joinpoint) löst IOException { / ** * die abgefangene Methode ab. */ String methodname = joinpoint.getSignature (). GetName (); /*** Holen Sie sich das abgefangene Objekt. */ Object Object = joinpoint.gettarget (); logger.info ("Berechtigungsverwaltung AOP, Methodame", MethodName); HttpServletRequest request = ((servletRequestattributes) RequestContexTHolder.getRequestAttributes ()). GetRequest (); HttpServletResponse response = ((servletRequestattributes) RequestContexTHolder.getRequestAttributes ()). GetResponse (); String releFFLAG = getLoginUserinfor.getLoginUserrol (Anfrage); / *** Super Administrator*/ if (permissionSlabeled.super_admin.equals (Rollenflag)) {return; } / *** Das Urteil der Anwendungsadministratoren, um Datenänderungen zu berechtigen* / if (permissionSlabeled.app_admin.equals (Rollenflag)) {if (Objectinformof AppController) {return; } if (Objektinstanz von AppPolicyController) {return; } logger.Error ("Anwendungsadministrator hat keine Betriebsberechtigungen"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } else if (permissionSlabeled.dept_admin.equals (rollenflag)) {if (Objectinformof DepartmentController) {return; } if (ObjectinSinformof UserController) {return; } if (Objectinformof GroupController) {return; } if ("getAlldepartments" .Equals (methodName)) {return; } logger.Error ("Anwendungsadministrator hat keine Betriebsberechtigungen"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } else {return; }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.