Σε αυτό το άρθρο, θα δούμε το φίλτρο Spring Security CORS και πώς μπορούμε να διαμορφώσουμε αυτό το φίλτρο στην εφαρμογή μας.
Φίλτρο ελατηρίου ασφαλείας CORS
Πριν μπούμε σε περισσότερες λεπτομέρειες για Φίλτρο ελατηρίου ασφαλείας CORSείναι πολύ σημαντικό να κατανοήσουμε τι είναι το CORS και τι φέρνει στο τοπίο της Spring Security που χρειάζεται ειδικό χειρισμό;
Για λόγους ασφαλείας, τα προγράμματα περιήγησης συνήθως απαγορεύουν την κλήση AJAX σε πόρους εκτός της τρέχουσας προέλευσης. Ας καταλάβουμε τι σημαίνει αυτό:
- Ας υποθέσουμε ότι έχετε ανοιχτό τον τραπεζικό σας λογαριασμό σε μία καρτέλα στο πρόγραμμα περιήγησης.
- Το πρόγραμμα περιήγησης δεν θα επιτρέπει στον ιστότοπο στην άλλη καρτέλα να έχει πρόσβαση στον ιστότοπο του τραπεζικού λογαριασμού, παρόλο που έχετε τα σωστά διαπιστευτήρια ενώ τον καλείτε.
Η κοινή χρήση πόρων Cross-Origin (CORS) είναι μια προδιαγραφή από το W3C που εφαρμόζεται από τα περισσότερα προγράμματα περιήγησης. Αυτοί οι μηχανισμοί μας επιτρέπουν να προσδιορίσουμε ποια αιτήματα μεταξύ τομέων είναι τα αιτήματα που επιτρέπονται. Αυτή η προδιαγραφή παρέχει μια πιο ασφαλή και ισχυρή διαδικασία πρόσβασης σε πόρους από διασταυρούμενη προέλευση από τις λιγότερο ασφαλείς επιλογές όπως IFRAME
ή JSONP
.
Για λόγους ασφαλείας, τα προγράμματα περιήγησης περιορίζουν τα αιτήματα HTTP πολλαπλής προέλευσης που ξεκινούν από σενάρια. Για παράδειγμα,
XMLHttpRequest
ακολουθήστε την πολιτική ίδιας προέλευσης, πράγμα που σημαίνει ότι μια εφαρμογή Ιστού μπορεί να ζητήσει πόρους μόνο από την ίδια προέλευση που φορτώθηκε η εφαρμογή.
1. ΚΟΡΣ
Τώρα έχουμε μια βασική κατανόηση του CORS. Ας δούμε πώς η Spring Security CORS
λειτουργεί το φίλτρο. Με το Spring Security, είναι σημαντικό ότι το CORS πρέπει να υποβληθεί σε επεξεργασία πριν από το Spring Security, επειδή αυτά τα αιτήματα πριν από την πτήση δεν θα περιέχουν cookie (π.χ. JSESSIONID
κ.λπ.) που είναι σημαντικά στοιχεία για την ασφάλεια του Spring.
Λάβετε υπόψη ότι χωρίς αυτά τα cookie, η ασφάλεια Spring θα καθορίσει ότι ένας χρήστης δεν έχει πιστοποιηθεί, επομένως είναι σημαντικό να CORS
να υποβληθεί σε επεξεργασία πριν από την ασφάλεια της Άνοιξης. Το φίλτρο ελατηρίου ασφαλείας CORS θα διασφαλίσει ότι θα χειριστεί πρώτα.

2. Φίλτρο CORS.
Το φίλτρο CORS ασφαλείας ελατηρίου θα διασφαλίσει ότι τα CORS χειρίζονται πρώτα. Μπορούμε να ενσωματωθούμε CorsWebFilter
με τη βοήθεια του CorsConfigurationSource
. Ας δούμε πώς να το προσθέσουμε στην εφαρμογή μας:
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://javadevjournal.com"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
Σε περίπτωση που θέλετε να το προσθέσετε κάτω από μια κοινή διαμόρφωση ασφαλείας:
@EnableWebSecurity
public class AppSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().configurationSource(request-> {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://javadevjournal.com"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
configuration.setAllowedHeaders(List.of("*"));
return configuration;
}).and()
....
}
}
2.1. Απενεργοποιήστε το φίλτρο ελατηρίου ασφαλείας CORS
Σε περίπτωση που θέλουμε να απενεργοποιήσουμε το φίλτρο CORS, μπορούμε να το κάνουμε εύκολα στην Spring Security χρησιμοποιώντας την τάξη config ασφαλείας:
@EnableWebSecurity
public class AppSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
protected void configure(HttpSecurity http) throws Exception {
http.cors().disable().and()
...
}
}
3. Μητρώο CORS
Μερικές φορές, μπορεί να εξακολουθείτε να λαμβάνετε το α 401
No 'Access-Control-Allow-Origin'
Η κεφαλίδα υπάρχει στο ζητούμενο σφάλμα πόρων από τον διακομιστή. Για να το χειριστούμε αυτό, μπορούμε επίσης να χρησιμοποιήσουμε το CorsRegistry
.
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:7777");
}
};
}
Περίληψη
Σε αυτό το άρθρο, εξερευνήσαμε το Φίλτρο ελατηρίου ασφαλείας CORS. Καταλάβαμε τι είναι το CORS και πώς να το χειριστούμε με το Spring Security. Ελέγξαμε επίσης ποιες είναι οι διαφορετικές επιλογές για τη διαμόρφωση του φίλτρου CORS με την ασφάλεια Spring. Όπως πάντα, μπορείτε να ελέγξετε τον πηγαίο κώδικα στο δικό μας Αποθετήριο GitHub.