Spring Security fournit des mécanismes d'authentification et d'autorisation, notamment : Authentification : vérifiez la validité des informations d'identification de l'utilisateur à l'aide d'un fournisseur d'authentification, par exemple en utilisant un nom d'utilisateur et un mot de passe ou une authentification LDAP. Autorisation : utilisez un gestionnaire de décision d'accès pour comparer les autorisations des utilisateurs et l'URL demandée afin de déterminer s'il faut accorder l'accès en fonction d'une décision d'accès, telle que AffirmativeBased (tout rôle correspondant autorise l'accès) ou ConsensusBased (tous les rôles correspondant autorisent l'accès). Cas pratique : RBAC (role-based access control) : Utilisez UserDetailsService pour définir les rôles, utilisez RoleHierarchyVoter pour établir la hiérarchie des rôles et utilisez AffirmativeBased pour accéder au gestionnaire de décision pour autorisation. "Processus d'authentification et d'autorisation pour Spring Security"
UserDetailsService (authentifier l'utilisateur à l'aide d'une logique personnalisée )LDAPAuthenticationProvider (authentifier via LDAP)
Le client envoie une demande d'authentification au serveur d'authentification, qui contient le nom d'utilisateur et le mot de passe.
Le serveur d'authentification transmet les informations d'identification au fournisseur d'authentification concerné. Le fournisseur d'authentification vérifie la validité des informations d'identification et renvoie un objet UserDetails authentifié.
Le serveur d'authentification récupère les autorisations dans l'objet UserDetails. Access Decision Manager compare les autorisations des utilisateurs à l'URL demandée.
Décidez d'accorder ou non l'accès en fonction de la décision d'accès.
Définir un service UserDetails utilisé dans a donné renvoie UserDetails avec le rôle approprié après le nom d'utilisateur.
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) { auth.userDetailsService(userDetailsService()); } @Override protected void configure(HttpSecurity http) { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ROLE_ADMIN") .antMatchers("/user/**").hasRole("ROLE_USER") .anyRequest().permitAll(); } }
@Service public class UserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) { User user = userRepository.findByUsername(username); return new UserDetailsAdapter(user); } }
public class UserDetailsAdapter implements UserDetails { private final User user; public UserDetailsAdapter(User user) { this.user = user; } // ... UserDetails implementation methods ... }
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!