απαιτήσεις: Το έργο πρέπει να τροποποιήσει δυναμικά τις παραμέτρους αιτήματος, να εκχωρήσει τιμές στις παραμέτρους αιτήματος σύμφωνα με τα δικαιώματα του τρέχοντος χρήστη, προτού οι παράμετροι εισέλθουν στη μέθοδο ελεγκτή, πρέπει να ολοκληρωθεί η τροποποίηση των παραμέτρων αιτήματος και όταν ο ελεγκτής καλεί το επίπεδο υπηρεσίας, οι παράμετροι αιτήματος μπορούν να χρησιμοποιηθούν ως συνθήκες για την αναζήτηση και την τροποποίηση των δεδομένων. Υπάρχουν δύο περιπτώσεις αίτησης παραμέτρων:
- Για χρήστες με υψηλά προνόμια, μπορείτε να χρησιμοποιήσετε τις πραγματικές ζητούμενες τιμές παραμέτρων
- Για άτομα με μόνο μερικά δικαιώματα, οι τιμές των παραμέτρων αιτήματος τροποποιούνται δυναμικά με βάση τις πληροφορίες που συνδέονται με τον τρέχοντα χρήστη
Στην αρχή, ήθελα να το εφαρμόσω μέσω ενός φίλτρου, αλλά ήταν πολύ δυσκίνητο για να σειριοποιήσω και να αποσειριοποιήσω το περιεχόμενο του αιτήματος, και απαιτούσε επίσης πολλή λογική κρίση και απώλεια απόδοσης. Ευτυχώς, το Spring παρέχει λειτουργικότητα AOP προσανατολισμένη στο πρόσωπο, η οποία μπορεί να εφαρμοστεί με απλό κώδικα.
Πρώτα απ 'όλα, το έργο maven πρέπει pom.xml να εισαγάγει το πακέτο spring-boot-starter-aop, ως εξής:
Μόλις εισαχθεί το πακέτο, μπορούμε να χρησιμοποιήσουμε τη δυνατότητα AOP, μέσω@Aspectσχόλιο.
Το Aspect υποστηρίζει 5 τύπους σχολιασμών ειδοποιήσεων:
@Before: Προαναγγελία, η οποία εκτελείται πριν από την εκτέλεση της μεθόδου
@After: Μετά την ειδοποίηση, που εκτελείται μετά την εκτέλεση της μεθόδου
@AfterRunning: Επιστρέφει μια ειδοποίηση, η οποία εκτελείται αφού η μέθοδος επιστρέψει ένα αποτέλεσμα
@AfterThrowing: Ειδοποίηση εξαίρεσης, αφού η μέθοδος εμφανίσει μια εξαίρεση
@Around: Ειδοποιήσεις αναδίπλωσης, γύρω από την εκτέλεση μεθόδου
Δημιουργήστε μια Request.java γενική κλάση περιτυλίγματος αιτημάτων:
Δημιουργήστε μια νέα UserInfo.java ζητήστε συγκεκριμένη κλάση δεδομένων:
Εάν η τρέχουσα κεφαλίδα αιτήματος έχει appid, η τιμή της παραμέτρου αιτήματος appId θα τροποποιηθεί, διαφορετικά, η παράμετρος αιτήματος δεν θα τροποποιηθεί, ο κωδικός είναι ο εξής:
Δημιουργήστε έναν νέο ελεγκτή HomeController και προσθέστε μια διεπαφή με μια παράμετρο αιτήματος που περιέχει αίτημα<UserInfo>, ο κώδικας έχει ως εξής:
Στην περίπτωση δοκιμής χωρίς την κεφαλίδα αιτήματος appId, η παράμετρος αιτήματος appId είναι η πραγματική τιμή και δεν έχει τροποποιηθεί, όπως φαίνεται στην παρακάτω εικόνα:
Εάν προσπαθήσετε να προσθέσετε την κεφαλίδα αιτήματος appId, μπορείτε να δείτε ότι η παράμετρος αιτήματος appId έχει τροποποιηθεί με επιτυχία, όπως φαίνεται στην παρακάτω εικόνα:
Τέλος, επισυνάψτε τον πηγαίο κώδικα:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
|