Maison développement back-end tutoriel php Développement backend Java : sécurité des API à l'aide de Spring Security

Développement backend Java : sécurité des API à l'aide de Spring Security

Jun 17, 2023 am 09:49 AM
java后端 api安全 spring security

Avec la croissance des applications Web modernes, les API sont devenues un élément important du développement Web. Ces API peuvent être appelées par des appareils mobiles, des applications Web et d'autres services, la sécurité des API devient donc essentielle. Dans le développement backend Java, Spring Security est un choix populaire qui fournit un cadre puissant pour protéger et gérer la sécurité des API.

Spring Security est un framework puissant et flexible qui peut aider les API à protéger les données des utilisateurs de manière plus sécurisée. Il est basé sur le framework Spring, dispose d'un mécanisme de sécurité et fournit de nombreuses fonctionnalités de sécurité, telles que l'authentification, l'autorisation, l'authentification unique, la gestion des mots de passe, etc. Dans cet article, nous nous concentrerons sur la façon d'utiliser Spring Security dans un backend Java pour sécuriser votre API.

Il existe les étapes suivantes pour utiliser Spring Security afin d'implémenter la sécurité de l'API :

  1. Configuration de Spring Security

La partie la plus importante de la configuration de Spring Security est la classe SecurityConfig. Dans ce cours, nous devons définir quelles URL doivent être gérées en toute sécurité et lesquelles doivent être publiées. Nous pouvons également définir ici des mécanismes d’authentification et d’autorisation.

Exemple de code :

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthUserDetailsService userDetailsService;

@Autowired
private CustomAuthenticationProvider authProvider;

@ Override
public void configure (AuthenticationManagerBuilder auth) lève une exception {

   auth.authenticationProvider(authProvider);
   auth.userDetailsService(userDetailsService);
Copier après la connexion

}

@Override
protected void configure(HttpSecurity http) lève une exception {

   http.authorizeRequests()
       .antMatchers("/admin/**").hasAuthority("ADMIN")
       .antMatchers("/api/**").authenticated()
       .and()
       .csrf().disable()
       .formLogin().disable()
       .httpBasic();
Copier après la connexion

}

}

Dans l'exemple de code ci-dessus, nous définissons la classe SecurityConfig, qui hérite de la classe WebSecurityConfigurerAdapter fournie par Spring. Nous utilisons l'annotation @Autowired pour injecter nos propres userDetailsService et authProvider pour authentifier les informations utilisateur. Dans la méthode configure(), nous définissons quelles URL doivent être gérées de manière sécurisée, par exemple : /admin/ nécessite des autorisations ADMIN pour accéder, /api/ nécessite une authentification avant d'accéder.

  1. Implémentation d'une authentification personnalisée

L'authentification est souvent l'une des parties les plus complexes d'une application Spring. Le mécanisme d'authentification personnalisé du framework Spring Security nous permet d'implémenter facilement l'authentification dans nos applications.

Nous pouvons personnaliser la logique d'authentification en remplaçant la méthode d'authentification (authentification d'authentification) de l'interface AuthenticationProvider. L'exemple de code est le suivant :

classe publique CustomAuthenticationProvider implémente AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
         String username = authentication.getName();
         String password = authentication.getCredentials().toString();

         AuthUserDetails user = userDetailsService.loadUserByUsername(username);

         if (!passwordEncoder.matches(password, user.getPassword())) {
               throw new BadCredentialsException("Invalid username or password");
         }

         List<GrantedAuthority> authorities = new ArrayList<>();
         for (AuthRole role : user.getAuthorities()) {
               authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
         }

         return new UsernamePasswordAuthenticationToken(user.getUsername(), null, authorities);
   }

  @Override
  public boolean supports(Class<?> authentication) {
         return authentication.equals(UsernamePasswordAuthenticationToken.class);
  }
Copier après la connexion

}

Dans le code ci-dessus, nous expliquons la logique de l'authentification personnalisée ligne par ligne. Obtenez d’abord les informations d’authentification de l’utilisateur entrant, puis authentifiez-vous via le service d’authentification personnalisé. Si le nom d'utilisateur et le mot de passe sont corrects, l'objet Authentication sera renvoyé, sinon une BadCredentialsException sera levée. Enfin, si l'authentification réussit, un objet UsernamePasswordAuthenticationToken sera renvoyé et Spring Security utilisera cet objet pour le traitement ultérieur de l'authentification et de l'autorisation.

  1. Implémentation du mécanisme d'autorisation de rôle

Nous pouvons utiliser l'annotation @PreAuthorize dans Spring Security pour définir quels rôles peuvent accéder à quelles ressources. Dans cette annotation, nous pouvons définir les rôles que nous avons définis dans la classe SecurityConfig.

Exemple de code :

@RestController
@RequestMapping("/api/v1/users")
classe publique UserController {

@Autowired
private UserService userService;

@GetMapping("/")
@PreAuthorize("hasAuthority('USER')")
public List<UserDTO> getUsers() {
    List<User> users = userService.getUsers();
    return UserMapper.toDtos(users);
}

@PostMapping("/")
@PreAuthorize("hasAuthority('ADMIN')")
public void createUser(@RequestBody UserDTO userDTO) {
    User user = UserMapper.toEntity(userDTO);
    userService.createUser(user);
}
Copier après la connexion

}

Dans le code ci-dessus, nous définissons une classe de contrôleur utilisateur, qui contient deux méthodes getUser () et createUser() pour l'autorisation de sécurité via l'annotation @PreAuthorize. L'annotation @PreAuthorize de la méthode getUser() est 'hasAuthority('USER')', qui correspond au rôle défini dans la classe SecurityConfig. De même, l'annotation @PreAuthorize de la méthode createUser() est 'hasAuthority('ADMIN')', ce qui correspond au rôle défini dans la classe SecurityConfig.

Conclusion :

La sécurité des API peut être facilement obtenue à l'aide du framework Spring Security. En personnalisant les mécanismes d’authentification et d’autorisation de rôle, nous pouvons rendre les applications plus sécurisées. Lorsque vous utilisez Spring Security pour la gestion de la sécurité des API, vous devez prendre en compte les exigences de sécurité de l'application, puis les configurer et les mettre en œuvre progressivement en fonction des exigences.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Spring Security 6 : cors() est obsolète et marqué pour suppression Spring Security 6 : cors() est obsolète et marqué pour suppression Feb 10, 2024 pm 11:45 PM

我有下面的代码:publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{returnhttp.httpBasic().disable().cors().and().csrf().disable().authorizeHttpRequests().requestMatchers("

Comment développer un système d'authentification unique basé sur Spring Security SAML à l'aide de Java Comment développer un système d'authentification unique basé sur Spring Security SAML à l'aide de Java Sep 22, 2023 am 08:49 AM

Comment utiliser Java pour développer un système d'authentification unique basé sur SpringSecuritySAML Introduction : Avec le développement rapide d'Internet, de plus en plus d'applications sont développées. Dans ces applications, la connexion des utilisateurs est l'une des fonctionnalités les plus courantes. Cependant, pour les applications de niveau entreprise, les utilisateurs doivent se connecter à plusieurs systèmes, ce qui entraînera une très mauvaise expérience de connexion. Afin de résoudre ce problème, le système d'authentification unique (SingleSign-On, appelé SSO) a vu le jour. simple

Quelles sont les cinq options de carrière Java qui vous conviennent le mieux ? Quelles sont les cinq options de carrière Java qui vous conviennent le mieux ? Jan 30, 2024 am 10:35 AM

Il existe cinq directions d'emploi dans l'industrie Java, laquelle vous convient le mieux ? Java, en tant que langage de programmation largement utilisé dans le domaine du développement de logiciels, a toujours été populaire. En raison de sa forte nature multiplateforme et de son cadre de développement riche, les développeurs Java disposent d'un large éventail d'opportunités d'emploi dans divers secteurs. Dans l'industrie Java, il existe cinq principales directions d'emploi, à savoir le développement JavaWeb, le développement d'applications mobiles, le développement de Big Data, le développement intégré et le développement du cloud computing. Chaque direction a ses caractéristiques et ses avantages. Les cinq directions seront discutées ci-dessous.

GO authentifier le jeton d'accès (keycloak) GO authentifier le jeton d'accès (keycloak) Feb 09, 2024 am 09:30 AM

J'essaie d'implémenter la validation du jeton d'accès à l'aide de GO. Mais les exemples que j'ai vus en ligne semblent simplement utiliser TOKEN_SECRET pour le vérifier. Mais je suis habitué à programmer dans Javaspring et je n'ai pas besoin d'utiliser TOKEN_SECRET. Je fournis simplement le jwk-set-uri et il vérifie la validité (filtres de sécurité automatique, etc.) et je sais qu'il parle au serveur oauth et effectue cette validation. N'y a-t-il pas de bibliothèque dans Go pour vérifier si le token est valide en faisant une requête au serveur oauth ? Je sais que je peux le faire manuellement en faisant une requête au point de terminaison userinfo du serveur oauth : http://localh

Développement backend Java : création d'API réactives avec Akka HTTP Développement backend Java : création d'API réactives avec Akka HTTP Jun 17, 2023 am 11:09 AM

La programmation réactive devient de plus en plus importante dans le développement Web actuel. AkkaHTTP est un framework HTTP hautes performances basé sur Akka, adapté à la création d'API réactives de style REST. Cet article expliquera comment utiliser AkkaHTTP pour créer une API réactive, tout en fournissant quelques exemples pratiques. Commençons ! Pourquoi choisir AkkaHTTP Lors du développement d'API réactives, il est important de choisir le bon framework. AkkaHTTP est un très bon choix car

Guide d'utilisation du cadre de contrôle des autorisations Spring Security Guide d'utilisation du cadre de contrôle des autorisations Spring Security Feb 18, 2024 pm 05:00 PM

Dans les systèmes de gestion back-end, le contrôle des autorisations d'accès est généralement requis pour limiter la capacité des différents utilisateurs à accéder aux interfaces. Si un utilisateur ne dispose pas d'autorisations spécifiques, il ne peut pas accéder à certaines interfaces. Cet article utilisera le projet waynboot-mall comme exemple pour présenter comment les systèmes de gestion back-end courants introduisent le cadre de contrôle des autorisations SpringSecurity. Le schéma est le suivant : Adresse du projet waynboot-mall : https://github.com/wayn111/waynboot-mall 1. Qu'est-ce que SpringSecurity SpringSecurity est un projet open source basé sur le framework Spring, visant à fournir une sécurité puissante et flexible ? pour les applications Java.

Comment utiliser Java pour développer un système d'authentification unique basé sur Spring Security OAuth2 Comment utiliser Java pour développer un système d'authentification unique basé sur Spring Security OAuth2 Sep 20, 2023 pm 01:06 PM

Comment utiliser Java pour développer un système d'authentification unique basé sur SpringSecurityOAuth2 Introduction : Avec le développement rapide d'Internet, de plus en plus de sites Web et d'applications nécessitent que les utilisateurs se connectent, mais les utilisateurs ne veulent pas se souvenir de chaque site Web ou application. Un numéro de compte et un mot de passe. Le système d'authentification unique (SingleSign-On, appelé SSO) peut résoudre ce problème, permettant aux utilisateurs d'accéder à plusieurs sites Web et applications sans authentification répétée après s'être connectés une fois. Cet article présentera

Comment gérer les requêtes inter-domaines dans le développement de fonctions backend Java ? Comment gérer les requêtes inter-domaines dans le développement de fonctions backend Java ? Aug 05, 2023 am 09:40 AM

Comment gérer les requêtes inter-domaines dans le développement de fonctions backend Java ? Dans un modèle de développement où le front-end et le back-end sont séparés, il est très courant que le front-end envoie des requêtes à l'interface API back-end pour obtenir des données via JavaScript. Cependant, en raison de la politique de même origine du navigateur, il existe des restrictions sur les requêtes inter-domaines. La requête inter-domaines signifie que la page frontale demande des serveurs avec différents noms de domaine, différents ports ou différents protocoles via AJAX et d'autres méthodes. Cet article présentera une méthode courante de gestion des requêtes inter-domaines dans le développement de fonctions back-end Java, avec des exemples de code. Résoudre plusieurs domaines

See all articles