Table des matières
1. Qu'est-ce que la sécurité Spring
2. Comment introduire Spring Security
3. Comment configurer Spring Security
4. Comment utiliser Spring Security
5. Obtenez les autorisations de l'utilisateur actuellement connecté
Pour résumer
Maison tutoriels informatiques connaissances en informatique 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
spring security spring security spring mvc waynboot

Spring Security权限控制框架使用指南

Dans le système de gestion backend, le contrôle des autorisations d'accès est généralement requis pour limiter la capacité des différents utilisateurs à accéder à l'interface. 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 introduire le cadre de contrôle des autorisations Spring Security dans les systèmes de gestion back-end courants. Le schéma est le suivant :

Adresse du projet waynboot-mall : https://github.com/wayn111/waynboot-mall

1. Qu'est-ce que la sécurité Spring

Spring Security est un projet open source basé sur le framework Spring, conçu pour fournir des solutions de sécurité puissantes et flexibles pour les applications Java. Spring Security offre les fonctionnalités suivantes :

  • Authentification : prend en charge plusieurs mécanismes d'authentification, tels que la connexion par formulaire, l'authentification de base HTTP, OAuth2, OpenID, etc.
  • Autorisation : prend en charge le contrôle d'accès basé sur les rôles ou les autorisations, ainsi que le contrôle précis basé sur les expressions.
  • Protection : fournit une variété de mesures de protection, telles que la prévention de la fixation de session, du détournement de clics, de la falsification de requêtes intersites et d'autres attaques.
  • Intégration : intégration transparente avec Spring Framework et d'autres bibliothèques et frameworks tiers, tels que Spring MVC, Thymeleaf, Hibernate, etc.

2. Comment introduire Spring Security

Introduisez directement la dépendance spring-boot-starter-security dans le projet waynboot-mall,


org.springframework.boot
spring-boot-starter-security
3.1.0

Copier après la connexion

3. Comment configurer Spring Security

La configuration de Spring Security dans Spring Security 3.0 est un peu différente d'avant, par exemple, elle n'hérite plus de WebSecurityConfigurerAdapter. Dans le projet waynboot-mall, la configuration spécifique est la suivante,

@Configuration
@EnableWebSecurity
@AllArgsConstructor
@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig {
private UserDetailsServiceImpl userDetailsService;
private AuthenticationEntryPointImpl unauthorizedHandler;
private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
private LogoutSuccessHandlerImpl logoutSuccessHandler;

@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
// cors启用
.cors(httpSecurityCorsConfigurer -> {})
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(httpSecuritySessionManagementConfigurer -> {
httpSecuritySessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
})
.exceptionHandling(httpSecurityExceptionHandlingConfigurer -> {
httpSecurityExceptionHandlingConfigurer.authenticationEntryPoint(unauthorizedHandler);
})
// 过滤请求
.authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> {
authorizationManagerRequestMatcherRegistry
.requestMatchers("/favicon.ico", "/login", "/favicon.ico", "/actuator/**").anonymous()
.requestMatchers("/slider/**").anonymous()
.requestMatchers("/captcha/**").anonymous()
.requestMatchers("/upload/**").anonymous()
.requestMatchers("/common/download**").anonymous()
.requestMatchers("/doc.html").anonymous()
.requestMatchers("/swagger-ui/**").anonymous()
.requestMatchers("/swagger-resources/**").anonymous()
.requestMatchers("/webjars/**").anonymous()
.requestMatchers("/*/api-docs").anonymous()
.requestMatchers("/druid/**").anonymous()
.requestMatchers("/elastic/**").anonymous()
.requestMatchers("/message/**").anonymous()
.requestMatchers("/ws/**").anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
})
.headers(httpSecurityHeadersConfigurer -> {
httpSecurityHeadersConfigurer.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable);
});
// 处理跨域请求中的Preflight请求(cors),设置corsConfigurationSource后无需使用
// .requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
// 对于登录login 验证码captchaImage 允许匿名访问

httpSecurity.logout(httpSecurityLogoutConfigurer -> {
httpSecurityLogoutConfigurer.logoutUrl("/logout");
httpSecurityLogoutConfigurer.logoutSuccessHandler(logoutSuccessHandler);
});
// 添加JWT filter
httpSecurity.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
// 认证用户时用户信息加载配置,注入springAuthUserService
httpSecurity.userDetailsService(userDetailsService);
return httpSecurity.build();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
/**
 * 强散列哈希加密实现
 */
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
Copier après la connexion

Voici une introduction détaillée à la classe de configuration SecurityConfig :

    La méthode
  • filterChain (HttpSecurity httpSecurity) est la méthode principale de contrôle d'accès. Ici, vous pouvez définir si l'authentification des autorisations est requise pour l'URL, la configuration cors, la configuration csrf, la configuration de chargement des informations utilisateur, la configuration d'interception du filtre jwt et de nombreuses autres fonctions.
  • La méthode
  • authenticationManager(AuthenticationConfiguration AuthenticationConfiguration) convient pour activer l'interface d'authentification et doit être déclarée manuellement, sinon une erreur sera signalée au démarrage.
  • La méthode
  • bCryptPasswordEncoder() permet à l'utilisateur de définir la politique de cryptage du mot de passe lors de sa connexion. Elle doit être déclarée manuellement, sinon une erreur sera signalée au démarrage.

4. Comment utiliser Spring Security

Pour utiliser Spring Security, il vous suffit d'ajouter l'annotation @PreAuthorize correspondante sur la méthode ou la classe qui doit contrôler les autorisations d'accès, comme suit,

@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("system/role")
public class RoleController extends BaseController {

private IRoleService iRoleService;

@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list")
public R list(Role role) {
Page page = getPage();
return R.success().add("page", iRoleService.listPage(page, role));
}
}
Copier après la connexion

Nous avons ajouté l'annotation @PreAuthorize(“@ss.hasPermi('system:role:list')”) à la méthode list pour indiquer que l'utilisateur actuellement connecté dispose des autorisations system:role:list pour accéder à la méthode list, sinon une erreur d'autorisation sera renvoyée.

5. Obtenez les autorisations de l'utilisateur actuellement connecté

Dans la classe de configuration SecurityConfig, nous définissons UserDetailsServiceImpl comme notre classe d'implémentation pour charger les informations utilisateur, afin de comparer le compte et le mot de passe de l'utilisateur dans la base de données avec le compte et le mot de passe transmis par le front-end. Le code est le suivant,

@Slf4j
@Service
@AllArgsConstructor
public class UserDetailsServiceImpl implements UserDetailsService {

private IUserService iUserService;

private IDeptService iDeptService;

private PermissionService permissionService;

public static void main(String[] args) {
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
System.out.println(bCryptPasswordEncoder.encode("123456"));
}

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 1. 读取数据库中当前用户信息
User user = iUserService.getOne(new QueryWrapper().eq("user_name", username));
// 2. 判断该用户是否存在
if (user == null) {
log.info("登录用户:{} 不存在.", username);
throw new UsernameNotFoundException("登录用户:" + username + " 不存在");
}
// 3. 判断是否禁用
if (Objects.equals(UserStatusEnum.DISABLE.getCode(), user.getUserStatus())) {
log.info("登录用户:{} 已经被停用.", username);
throw new DisabledException("登录用户:" + username + " 不存在");
}
user.setDept(iDeptService.getById(user.getDeptId()));
// 4. 获取当前用户的角色信息
Set rolePermission = permissionService.getRolePermission(user);
// 5. 根据角色获取权限信息
Set menuPermission = permissionService.getMenuPermission(rolePermission);
return new LoginUserDetail(user, menuPermission);
}
}
Copier après la connexion

Voici une explication de la logique du code de UserDetailsServiceImpl, afin que vous puissiez la comprendre à l'aide du code.

  • Lire les informations actuelles de l'utilisateur dans la base de données
  • Déterminer si l'utilisateur existe
  • Déterminez s'il faut désactiver
  • Obtenir les informations sur le rôle de l'utilisateur actuel
  • Obtenir des informations d'autorisation en fonction du rôle

Pour résumer

Cet article vous explique comment introduire la version Spring Security 3.0 du framework de contrôle des autorisations dans le système de gestion back-end et la pratique du code. Je pense que cela peut aider tout le monde à avoir une compréhension claire du cadre de contrôle des autorisations Spring Security. Plus tard, vous pourrez suivre le guide d'utilisation de cet article pour introduire étape par étape Spring Security dans vos propres projets pour le contrôle d'accès.

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines 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("

17 façons de résoudre l'écran bleu kernel_security_check_failure 17 façons de résoudre l'écran bleu kernel_security_check_failure Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (échec de la vérification du noyau) est un type de code d'arrêt relativement courant. Cependant, quelle qu'en soit la raison, l'erreur d'écran bleu rend de nombreux utilisateurs très angoissés. Laissez ce site présenter soigneusement 17 types de solutions aux utilisateurs. 17 solutions à l'écran bleu kernel_security_check_failure Méthode 1 : Supprimer tous les périphériques externes Lorsqu'un périphérique externe que vous utilisez est incompatible avec votre version de Windows, l'erreur d'écran bleu Kernelsecuritycheckfailure peut se produire. Pour ce faire, vous devez débrancher tous les périphériques externes avant d'essayer de redémarrer votre ordinateur.

Un nouveau paradigme de programmation, quand Spring Boot rencontre OpenAI Un nouveau paradigme de programmation, quand Spring Boot rencontre OpenAI Feb 01, 2024 pm 09:18 PM

En 2023, la technologie de l’IA est devenue un sujet brûlant et a un impact énorme sur diverses industries, notamment dans le domaine de la programmation. Les gens sont de plus en plus conscients de l’importance de la technologie de l’IA, et la communauté Spring ne fait pas exception. Avec l’évolution continue de la technologie GenAI (Intelligence Artificielle Générale), il est devenu crucial et urgent de simplifier la création d’applications dotées de fonctions d’IA. Dans ce contexte, « SpringAI » a émergé, visant à simplifier le processus de développement d'applications fonctionnelles d'IA, en le rendant simple et intuitif et en évitant une complexité inutile. Grâce à « SpringAI », les développeurs peuvent plus facilement créer des applications dotées de fonctions d'IA, ce qui les rend plus faciles à utiliser et à exploiter.

Utilisez Spring Boot et Spring AI pour créer des applications d'intelligence artificielle générative Utilisez Spring Boot et Spring AI pour créer des applications d'intelligence artificielle générative Apr 28, 2024 am 11:46 AM

En tant que leader du secteur, Spring+AI fournit des solutions de pointe pour divers secteurs grâce à son API puissante et flexible et ses fonctions avancées. Dans cette rubrique, nous examinerons les exemples d'application de Spring+AI dans divers domaines. Chaque cas montrera comment Spring+AI répond à des besoins spécifiques, atteint ses objectifs et étend ces LEÇONS APPRISES à une gamme plus large d'applications. J'espère que ce sujet pourra vous inciter à comprendre et à utiliser plus profondément les possibilités infinies de Spring+AI. Le framework Spring a une histoire de plus de 20 ans dans le domaine du développement logiciel, et cela fait 10 ans que la version Spring Boot 1.0 est sortie. Maintenant, personne ne peut contester ce printemps

Quelles sont les méthodes de mise en œuvre des transactions programmatiques Spring ? Quelles sont les méthodes de mise en œuvre des transactions programmatiques Spring ? Jan 08, 2024 am 10:23 AM

Comment implémenter les transactions programmatiques Spring : 1. Utilisez TransactionTemplate ; 2. Utilisez TransactionCallback et TransactionCallbackWithoutResult ; 3. Utilisez les annotations Transactional ; 4. Utilisez TransactionTemplate en combinaison avec @Transactional ;

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

Comment définir le niveau d'isolement des transactions au printemps Comment définir le niveau d'isolement des transactions au printemps Jan 26, 2024 pm 05:38 PM

Comment définir le niveau d'isolement des transactions dans Spring : 1. Utilisez l'annotation @Transactional ; 2. Définissez-le dans le fichier de configuration Spring ; 3. Utilisez PlatformTransactionManager ; Introduction détaillée : 1. Utilisez l'annotation @Transactional, ajoutez l'annotation @Transactional à la classe ou à la méthode qui nécessite la gestion des transactions et définissez le niveau d'isolement dans l'attribut 2. Dans le fichier de configuration Spring, etc.

JAX-RS contre Spring MVC : une bataille entre les géants RESTful JAX-RS contre Spring MVC : une bataille entre les géants RESTful Feb 29, 2024 pm 05:16 PM

Introduction Les API RESTful font désormais partie intégrante des applications WEB modernes. Ils fournissent une approche standardisée pour créer et utiliser des services Web, améliorant ainsi la portabilité, l'évolutivité et la facilité d'utilisation. Dans l'écosystème Java, JAX-RS et springmvc sont les deux frameworks les plus populaires pour créer des API RESTful. Cet article examinera en profondeur les deux frameworks, en comparant leurs fonctionnalités, avantages et inconvénients pour vous aider à prendre une décision éclairée. JAX-RS : JAX-RSAPI JAX-RS (JavaAPI pour RESTful Web Services) est un standard JAX-RSAPI développé par JavaEE pour le développement de REST.

See all articles