Dec 20, 2008

Διαβάζοντας την ταυτότητα του χρήστη (user identity) στο JAX-RPC - Μέρος 2ο

Σε παλαιότερο άρθρο (http://serafeimk.blogspot.com/2008/06/user-identity-jax-rpc.html) είχαμε αναφερθεί στην δυνατότητα άντλησης πληροφορίας σχετικά με την ταυτότητα του συνδεδεμένου χρήστη από το επίπεδο του JAX-RPC handlers που λειτουργούν ως ενδιάμεσοι (interceptors) μιας web service κλήσης. Υπάρχουν φορές όμως που θα χρειαστούμε την ίδια πληροφορία και στο πραγματικό επίπεδο της εφαρμογής, του κώδικά μας δηλαδή που γίνεται web service. Για να το καταφέρουμε αυτό, θα πρέπει να αποκτήσουμε πρόσβαση στο context του web service και πιο συγκεκριμένα στο servlet context. Έπειτα, θα ακολουθήσουμε τα τυπικά βήματα μιας servlet εφαρμογής διαβάζει τα χαρακτηριστικά ασφάλειας του χρήστη.

Ειδικότερα, το web service θα πρέπει να υλοποιεί το interface javax.xml.rpc.server.ServiceLifecycle που αφορά τον κύκλο ζωής της δικτυακής μας υπηρεσίας. Διαθέτει δυο μεθόδους, την init() που εκτελείται μοναδικά, με την αρχικοποίηση του service, και την destroy() που επίσης εκτελείται μοναδικά με τον τερματισμό. Κατά τη διαδικασία της αρχικοποίησης λοιπόν, θα χρειαστεί να αποθηκεύσουμε σε μια instance variable το servlet context, με κάτι αντίστοιχο:

/**
* Initialize servlet context.
* @param object is the context.
*/
public void init(Object object) {
logger.debug("Initializing ServletEndpointContext...");
// Init context.
servletEndpointContext =
(ServletEndpointContext) object;
logger.debug("Initialized ServletEndpointContext");
}


Τώρα, στις μεθόδους μας που έχουμε εξάγει ως web services, θα αντλήσουμε από το servlet context την ταυτότητα του χρήστη, για να το χρησιμοποιήσουμε σύμφωνα με τις ανάγκες μας.
// ...
if( servletEndpointContext != null ) {
String userId = servletEndpointContext.getUserPrincipal().getName();
}

No comments: