Pertanyaan Dapatkah saya menggunakan ekspresi dalam anotasi keamanan Apache Shiro?


Saya telah melakukan beberapa perbandingan antara Apache Shiro dan Spring Security - Saya benar-benar menyukai model keamanan yang digunakan Shiro dan percaya itu jauh lebih bersih dari Spring Security.

Namun, satu hal yang bagus untuk dimiliki adalah mampu mereferensikan parameter metode dari dalam anotasi keamanan tingkat metode. Misalnya, sekarang saya bisa jadi sesuatu seperti:

@RequiresPermissions("account:send:*")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }

Dalam konteks contoh ini, ini berarti bahwa pengguna yang diautentikasi harus memiliki izin untuk mengirim email di akun email.

Namun, ini tidak cukup jelas, karena saya ingin izin tingkat instance! Dalam konteks ini, asumsikan bahwa pengguna dapat memiliki izin pada contoh akun email. Jadi, saya ingin menulis kode sebelumnya seperti ini:

@RequiresPermissions("account:send:${account.id}")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }

Dengan cara ini, string izin mereferensikan parameter yang dilewatkan ke metode sehingga metode tersebut dapat diamankan terhadap contoh khusus EmailAccount.

Saya tahu saya dapat dengan mudah melakukan ini dari kode Java biasa dalam metode ini, tetapi akan sangat bagus untuk mencapai hal yang sama menggunakan anotasi - Saya tahu Spring Security mendukung ekspresi Spring EL dalam anotasinya.

Apakah ini jelas bukan fitur Shiro dan karenanya saya harus menulis anotasi kustom saya sendiri?

Terima kasih,

Andrew


32
2017-07-27 10:06


asal


Jawaban:


Lihatlah kelas-kelas di http://shiro.apache.org/static/current/apidocs/org/apache/shiro/authz/aop/package-summary.html, khususnya PermissionAnnotationHandler. Di sana Anda dapat melihat bahwa semua Shiro tidak ketika menghadapi @RequiresPermissions anotasi adalah panggilan getSubject().isPermitted(permission) dan tidak ada substitusi di dalam nilai anotasi sama sekali. Anda harus entah bagaimana menimpa pawang tersebut jika Anda menginginkan fungsionalitas semacam ini.

Jadi untuk menjawab pertanyaan Anda: ya, ini jelas bukan fitur Shiro dan Anda harus menulis anotasi Anda sendiri atau entah bagaimana menimpa pawang itu.


6
2017-08-24 13:03



Fitur ini saat ini tidak didukung oleh Shiro. Banyak orang telah meminta fitur ini. Mungkin kita bisa memilih masalah ini?

https://issues.apache.org/jira/browse/SHIRO-484

https://issues.apache.org/jira/browse/SHIRO-77

https://issues.apache.org/jira/browse/SHIRO-417

https://issues.apache.org/jira/browse/SHIRO-331


2
2017-12-14 02:42