Skenario yang digunakan oleh AOP dalam proyek aktual terutama adalah manajemen otoritas, manajemen transaksi, manajemen keamanan, penebangan dan debugging.
Masalahnya berasal dari pengembangan proyek
Baru -baru ini, modul manajemen izin diperlukan dalam proyek. Menurut pendekatan kolega sebelumnya, itu adalah untuk membuat penilaian logis sebelum setiap antarmuka dalam panggilan lapisan pengontrol. Tidak ada yang salah dengan melakukan ini, tetapi tingkat pengulangan kode terlalu tinggi, dan itu adalah kerja fisik. Jadi, sebagaimana disebutkan dalam judul, gunakan Spring AOP untuk membuat titik celah untuk mencapai manajemen izin fungsi umum, yang mengurangi skalabilitas pengembangan proyek di kemudian hari.
File implementasi dan konfigurasi kode untuk manajemen izin
Dengan tingkat modifikasi kode minimum, AOP tidak diragukan lagi merupakan pilihan yang ideal. Ada berbagai izin dalam proyek, dan kompleksitas logika relatif tinggi, jadi kami akan mengambilnya langkah demi langkah. Karena izin melibatkan panggilan ke antarmuka backend, penulis memilih untuk membuat bagian dalam kode lapisan pengontrol, dan titik tangen adalah berbagai blok metode dalam pengontrol. Untuk izin akses umum, kami menggunakan ekspresi eksekusi untuk mengecualikannya.
Implementasi izin administrator read-only dan pemilihan titik-potong
Untuk pengontrol yang mengimplementasikan pengecualian umum, penulis menggunakan operasi logika ekspresi eksekusi. Karena administrator read-only memiliki izin baca global, dan untuk izin menambahkan, menghapus dan memodifikasi, penulis menggunakan metode penambahan, menghapus dan memodifikasi menggunakan titik pemotongan. Jadi, penamaan metode standar sangat penting saat ini. Untuk berbagai administrator yang diperparah dengan administrator hanya baca, kami dapat membuat penilaian khusus dalam Kode. Berikut ini adalah metode konfigurasi file konfigurasi AOP pegas.
<bean id="usersPermissionsAdvice" /> <aop:config> <!--Define the section--> <aop:aspect id="authAspect" ref="usersPermissionsAdvice"> <!--Define the entry point (configured under com.thundersoft.metadata.web.controller.*.edit*(..)) or execution(* com.thundersoft.metadata.web.controller.*. Edit*(..)) atau eksekusi (*com.thundersoft.metadata.web.controller.*. Edit*(..)) atau eksekusi (*com.thundersoft.metadata.web.controller.* com.thundersoft.metadata.web.controller.*. Update*(..)) atau eksekusi (*com.thundersoft.metadata.web.controller.*. Sisipkan*(..)) atau eksekusi (*com.thundersoft.metadata.web.troller.*. com.thundersoft.metadata.web.controller.*. Down*(..)))) dan (! Eksekusi (*com.thundersoft.metadata.web.controller.findpassword. ! Eksekusi (* com.thundersoft.metadata.web.controller.homecontroller.* (..)) dan! Eksekusi (* com.thundersoft.metadata.web.controller.userstatuscontroller.* (..)) dan! Eksekusi (* com.thundersoft.metadata.web.controller.userstatusController.*(..))) dan! id = "authpointcut"/> <!-eksekusi sebelum metode disebut-> <aop: sebelum metode = "readonly" pointcut-ref = "authpointcut"/> </aop: aspek> </aop: config>
Implementasi Kode Manajemen Izin Administrator Baca saja
Saya telah mengatakan begitu banyak di atas, dan saya tidak akan mengatakan banyak omong kosong. Di bawah ini adalah implementasi Kode Sectional yang mengontrol izin baca saja dan berbagai izin senyawa.
/*** Penghakiman intersepsi AOP dilakukan pada administrator hanya baca dan administrator kompleks mereka. * @param joinpoint titik masuk. * @Throws IoException * / public void readonly (joinpoint goinpoint) melempar ioException { / ** * Dapatkan metode yang dicegat. */ String methodName = joinpoint.getSignature (). GetName (); /*** Dapatkan objek yang dicegat. */ Objek objek = joinpoint.getTarget (); Logger.info ("Manajemen Izin AOP, Metode Nama" + MethodName); HttpservletRequest request = ((servletRequestAttributes) requestContextholder.getRequestAttributes ()). GetRequest (); HttpservletResponse response = ((servletRequestAttributes) requestContextholder.getRequestAttributes ()). GetResponse (); String roleflag = getLoginUserInfor.getLoginuserrole (request); / *** Super Administrator*/ if (permisionslabeled.super_admin.equals (roleflag)) {return; } / *** Penilaian administrator hanya baca untuk membuat perubahan data pada izin* / if (izinLabeled.reader_admin.equals (roleflag)) {logger.error ("Readonly Administrator tidak memiliki izin operasi!"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } / ** * administrator departemen, dan merupakan administrator read-only, * / if (permisionsLabeled.dept_reader_admin.equals (roleflag)) {if (objek instance dari departmentController) {return; } if (instance objek dari usercontroller) {if (methodName.contains ("addAdmin")) {response.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"); } kembali; } if (objek instanceof grupController) {return; } Logger.Error ("Administrator Departemen, dan tidak ada izin operasi untuk administrator hanya baca!"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } / *** Administrator aplikasi, dan administrator read-only* / if (permisionsLabeled.app_reader_admin.equals (roleflag)) {if (objek instance dari appController) {return; } if (objek instance dari apppolicycontroller) {return; } Logger.Error ("Administrator Aplikasi, dan tidak ada izin operasi untuk administrator hanya baca!"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } / *** Administrator departemen, dan administrator aplikasi, dan administrator read-only* / if (permisionsLabeled.dept_app_reader_admin.equals (roleflag)) {if (objek instance dari departemen controller) {return; } if (instance objek dari usercontroller) {return; } if (objek instanceof grupController) {return; } if (objek instance dari appController) {return; } if (objek instance dari apppolicycontroller) {return; } Logger.Error ("Administrator Departemen, dan Administrator Aplikasi, dan Administrator Read-only tidak memiliki izin operasi"); response.sendredirect (request.getContextPath () + "/auth/readonly"); }}Pilihan Point-Cut dengan Kontrol Privilege Administrator Dedikasi
Karena cukup istimewa untuk memiliki hak administrator khusus, penulis menggunakan controller selain hak akses umum. Dalam keadaan khusus, dapat diimplementasikan dalam logika kode. Kode file konfigurasi adalah sebagai berikut:
<AOP: Config> <!-Tentukan bagian-> <aop: aspek id = "authaspect" ref = "userpermissionsadvice"> <!-Tentukan titik masuk (dikonfigurasi di bawah com.thundersoft.metadata.web.controller dicegat sebelum dipanggil)-> <aop: pointcut ekspresi (* com.thundersoft.metadata.web.controller.*.*(..)) dan (! Eksekusi (*com.thundersoft.metadata.web.controller.findpasswordController. (..)) dan! ! Eksekusi (* com.thundersoft.metadata.web.controller.SelfserviceController.* (..)) dan! Eksekusi (* com.thundersoft.metadata.web.controller.homecontroller.* (..)) dan! Eksekusi (* com.thundersoft.metadata.web.controller.dashboardController.*(..)) dan! Eksekusi (*com.thundersoft.metadata.web.controller.dashboardController.*(..)) dan! Eksekusi (*com.thundersoft.metadata. ! Eksekusi (* com.thundersoft.metadata.web.controller.mainController.* (..)))) "id =" appAuthpointcut "/> <!-Eksekusi sebelum metode ini disebut-> <aop: sebelum metode =" appdeptAuth "pointcut-ref =" appAuthpointc: "/appdeptAuth" pointcut-ref = "AppAuthPoPoPCut"/aPPDEPTAUTH "pointcut-ref =" AppAuthPoPPoTCC "
## Kode Alamat Implementasi manajemen izin
/*** membuat penilaian intersepsi sewenang -wenang pada administrator aplikasi dan administrator departemen. * @param joinpoint titik masuk. * @Throws IoException * / public void appDeptAuth (joinpoint goinpoint) melempar ioException { / ** * Dapatkan metode yang dicegat. */ String methodName = joinpoint.getSignature (). GetName (); /*** Dapatkan objek yang dicegat. */ Objek objek = joinpoint.getTarget (); Logger.info ("Manajemen Izin AOP, Metode Nama", MethodName); HttpservletRequest request = ((servletRequestAttributes) requestContextholder.getRequestAttributes ()). GetRequest (); HttpservletResponse response = ((servletRequestAttributes) requestContextholder.getRequestAttributes ()). GetResponse (); String roleflag = getLoginUserInfor.getLoginuserrole (request); / *** Super Administrator*/ if (permisionslabeled.super_admin.equals (roleflag)) {return; } / *** Penilaian administrator aplikasi untuk membuat perubahan data izin* / if (izinLabeled.app_admin.equals (roleflag)) {if (objek instance dari appController) {return; } if (objek instance dari apppolicycontroller) {return; } Logger.Error ("Administrator Aplikasi tidak memiliki izin operasi"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } else if (permisionsLabeled.dept_admin.equals (roleFlag)) {if (instance objek dari departmentController) {return; } if (instance objek dari usercontroller) {return; } if (objek instanceof grupController) {return; } if ("getAllDepartments" .equals (methodName)) {return; } Logger.Error ("Administrator Aplikasi tidak memiliki izin operasi"); response.sendredirect (request.getContextPath () + "/auth/readonly"); } else {return; }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.