Telle est la situation.
L'interface back-end springboot est gérée avec les autorisations shiro. Je veux me souvenir du mot de passe et me connecter automatiquement dans les 24 heures lorsque je me connecte. Shiro fournit le gestionnaire de mots de passe de RememberMe pour nous aider à réaliser une connexion automatique.
Permettez-moi d'abord de parler du premier puits. Cross-domain, ce n'est rien à dire, ce n'est pas un gouffre spécial, il suffit de suivre la configuration ci-dessous.
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CustomCORSConfiguration {
private CorsConfiguration buildConfig(){
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedHeader("*"); // 允许任何的head头部
corsConfiguration.addAllowedOrigin("*"); // 允许任何域名使用
corsConfiguration.addAllowedMethod("*"); // 允许任何的请求方法
corsConfiguration.setAllowCredentials(true);
return corsConfiguration;
}
// 添加CorsFilter拦截器,对任意的请求使用
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}
Outre la première fosse, c'est une immense fosse. Demande de transport de cookies
J'ai injecté CookieRememberMeManager dans ShiroConfig pour me souvenir du gestionnaire de mots de passe. Dans ce processus, le gestionnaire de mots de passe de mémorisation créera un cookie nommé RememberMe, et je fixai le maxAge de ce cookie à un jour, et en même temps je me connectai au nouveau UsernamePasswordToken (nom d'utilisateur, password, true), modifiez le troisième paramètre qui consiste à se connecter automatiquement à true. Selon l'urgence d'utiliser layui dans le passé, après la connexion, le système créera deux paramètres sur le front-end, l'un s'appelle JSESSIONID et l'autre s'appelle RememberMe. comme suit:
Mais après vous être connecté avec succès sur mon interface de connexion vue,
Les problèmes suivants se sont produits:
1: Ces deux paramètres ne sont pas dans le cookie.
2: Dans le même temps, lors de l'authentification par autorisation, le système utilise uniquement l'interface d'authentification de connexion de ShiroRealm, pas l'interface d'authentification d'autorisation. WTF? (Trop en colère pour découvrir la raison après avoir cherché pendant longtemps)
3: Ouvrez le réseau du mode de débogage développeur de Google et constatez qu'il n'y a pas de cookie dans la demande (c'est le point le plus terrible).
Alors quelle est la raison.
La requête Axios ne contient pas de cookies par défaut. Je dois l'activer manuellement. Définissez simplement l'attribut withCredentials égal à true. Un attribut résout trois problèmes. comme suit
(De plus, sur l'image, axios a intercepté l'en-tête de la demande et mis en place un en-tête nommé Authorization, qui n'a rien à voir avec shiro. C'est ainsi que j'ai configuré la vérification d'interception de jetons dans swagger, ce qui semble être expliqué dans le swagger précédent. blog associé)
Parlons de la troisième fosse. Transférer des données au format x-www-form-urlencoded
Dans l'image ci-dessus, j'ai défini le type de contenu: 'application / json' dans l'intercepteur.
Mais cela n'a pas vraiment joué de rôle. Après avoir supprimé le type de contenu dans cet intercepteur, la demande est toujours au format json par défaut.
Bien sûr, la grande majorité des requêtes sont au format json et il n'y a pas de problème, mais j'ai un backend de l'interface de publication avec des paramètres liés par l'annotation @ModelAttribute. Le format json par défaut m'empêche d'obtenir ce paramètre. Pour le moment, je dois changer le format de la demande de requête en application / x-www-form-urlencoded.
Mais comment le changer consiste à envelopper le paramètre objet product qui devait initialement être passé en arrière-plan dans les données avec le nouveau URLSearchParams (produit).