


Nutzungshandbuch für das Spring Security-Berechtigungskontroll-Framework
Im Backend-Verwaltungssystem ist normalerweise eine Zugriffsberechtigungskontrolle erforderlich, um den Zugriff verschiedener Benutzer auf die Schnittstelle einzuschränken. Fehlen einem Benutzer bestimmte Berechtigungen, kann er auf bestimmte Schnittstellen nicht zugreifen.
In diesem Artikel wird das Waynboot-Mall-Projekt als Beispiel verwendet, um vorzustellen, wie das Berechtigungskontroll-Framework Spring Security in gängige Back-End-Verwaltungssysteme eingeführt wird. Die Gliederung lautet wie folgt:
waynboot-mall-Projektadresse: https://github.com/wayn111/waynboot-mall
1. Was ist Spring Security?
Spring Security ist ein Open-Source-Projekt, das auf dem Spring-Framework basiert und darauf ausgelegt ist, leistungsstarke und flexible Sicherheitslösungen für Java-Anwendungen bereitzustellen. Spring Security bietet die folgenden Funktionen:
- Authentifizierung: Unterstützt mehrere Authentifizierungsmechanismen, wie z. B. Formularanmeldung, HTTP-Basisauthentifizierung, OAuth2, OpenID usw.
- Autorisierung: Unterstützt rollen- oder berechtigungsbasierte Zugriffskontrolle sowie ausdrucksbasierte feinkörnige Kontrolle.
- Schutz: Bietet eine Vielzahl von Schutzmaßnahmen, z. B. die Verhinderung von Sitzungsfixierungen, Klick-Hijacking, Cross-Site-Request-Forgery und anderen Angriffen.
- Integration: Nahtlose Integration mit Spring Framework und anderen Bibliotheken und Frameworks von Drittanbietern wie Spring MVC, Thymeleaf, Hibernate usw.
Führen Sie die Spring-Boot-Starter-Security-Abhängigkeit direkt in das Waynboot-Mall-Projekt ein,
org.springframework.boot spring-boot-starter-security 3.1.03. So konfigurieren Sie Spring Security
Die Konfiguration von Spring Security in Spring Security 3.0 unterscheidet sich ein wenig von zuvor, zum Beispiel erbt es nicht mehr WebSecurityConfigurerAdapter. Im Waynboot-Mall-Projekt ist die spezifische Konfiguration wie folgt:
@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(); } }Hier finden Sie eine detaillierte Einführung in die SecurityConfig-Konfigurationsklasse:
Die Methode
- filterChain(HttpSecurity httpSecurity) ist die Kernmethode der Zugriffskontrolle. Hier können Sie festlegen, ob eine Berechtigungsauthentifizierung für die URL, die CORS-Konfiguration, die CSRF-Konfiguration, die Konfiguration zum Laden von Benutzerinformationen, die Konfiguration des JWT-Filters und viele andere Funktionen erforderlich ist.
- Die Methode authenticationManager(AuthenticationConfiguration AuthenticationConfiguration) eignet sich zum Aktivieren der Authentifizierungsschnittstelle und muss manuell deklariert werden, andernfalls wird beim Start ein Fehler gemeldet.
- Mit der Methode bCryptPasswordEncoder() kann der Benutzer die Kennwortverschlüsselungsrichtlinie definieren, wenn er sich anmeldet. Sie muss manuell deklariert werden, andernfalls wird beim Start ein Fehler gemeldet.
Um Spring Security zu verwenden, müssen Sie nur die entsprechende @PreAuthorize-Annotation zu der Methode oder Klasse hinzufügen, die die Zugriffsberechtigungen steuern muss, wie folgt:
@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)); } }Wir haben der Listenmethode die Annotation @PreAuthorize(“@ss.hasPermi('system:role:list')”) hinzugefügt, um anzuzeigen, dass der aktuell angemeldete Benutzer über system:role:list-Berechtigungen für den Zugriff auf die Listenmethode verfügt, andernfalls Es wird ein Berechtigungsfehler zurückgegeben.
5. Holen Sie sich die Berechtigungen des aktuell angemeldeten Benutzers
In der SecurityConfig-Konfigurationsklasse definieren wir UserDetailsServiceImpl als unsere Implementierungsklasse zum Laden von Benutzerinformationen, um das Konto und das Passwort des Benutzers in der Datenbank mit dem vom Frontend übergebenen Konto und Passwort zu vergleichen. Der Code lautet wie folgt:
@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); } }Hier finden Sie eine Erläuterung der Codelogik von UserDetailsServiceImpl, damit Sie sie mithilfe des Codes verstehen können.
- Aktuelle Benutzerinformationen in der Datenbank lesen
- Stellen Sie fest, ob der Benutzer existiert
- Bestimmen Sie, ob Sie die Funktion deaktivieren möchten
- Rufen Sie die Rolleninformationen des aktuellen Benutzers ab
- Erhalten Sie Berechtigungsinformationen basierend auf der Rolle
In diesem Artikel erfahren Sie, wie Sie die Spring Security 3.0-Version des Berechtigungskontroll-Frameworks in das Back-End-Verwaltungssystem und die Codepraxis einführen. Ich glaube, es kann jedem helfen, ein klares Verständnis des Berechtigungskontroll-Frameworks Spring Security zu erlangen. Später können Sie der Nutzungsanleitung in diesem Artikel folgen, um Spring Security Schritt für Schritt in Ihre eigenen Projekte zur Zugriffskontrolle einzuführen.
Das obige ist der detaillierte Inhalt vonNutzungshandbuch für das Spring Security-Berechtigungskontroll-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Die Datenwiederherstellung ist immer ein erhitztes Thema. Um Daten von Ihrem Gerät erfolgreich wiederherzustellen, sollten Sie wissen, wie Daten gespeichert sind. Sie können den Unterschied zwischen RAID -Wiederherstellung und Festplattenwiederherstellung aus diesem PHP.CN -Beitrag lernen.

Bekommen Sie beim Tippen auf Word -Text verschwinden? Einige Briefe oder sogar Absätze können aus Ihrem Dokument verschwinden. Was ist daran los? In diesem Beitrag von der PHP.CN -Website werden wir uns das Wort automatisch ansehen, das das Problem mit automatisch löschen

Wenn Sie versuchen, sich bei Overwatch 2 anzumelden, erhalten Sie möglicherweise die Fehlermeldung von LC-208 und verhindert, dass Ihr Spiel mit den Spielen-Servern eine Verbindung herstellt. In diesem Beitrag von Php.cn wird der LC-208-Overwatch-Fehler behoben.

Im Allgemeinen können Sie von Datei Explorer schnell auf Google Drive -Dateien zugreifen und bearbeiten. Manchmal begegnen Sie jedoch auf das Problem „Google Drive verschwunden aus dem Datei -Explorer“. Hier in diesem Beitrag auf Php.cn sagt Ihnen, wie Sie Google Drive zum Anzeigen bringen können

Warum ist mein Computer so lange auf dem Begrüßungsbildschirm? Wie repariere ich Windows 7 Welcome Screen Langsam? Wenn Sie immer noch Windows 7 auf Ihrem PC ausführen und dieses Problem erfüllen, sind Sie am richtigen Ort und mehrere Lösungen werden hier von Php.cn angegeben.

Möchten Sie das integrierte Tool für das integrierte Kennwortverwaltung verwenden-Anmeldeinformationsmanager, um Ihre Anmeldeinformationen für Web und Apps zu verwalten? Wie können Sie den Anmeldeinformationsmanager in Windows 11 öffnen? In diesem Beitrag sammelte Php.cn mehrere Möglichkeiten, um auf dieses Dienstprogramm zuzugreifen und zu lassen.

Der MicroSft Defender Antivirus verfügt über eine Funktion, die als periodisches Scanning bezeichnet wird. Dies kann aktiviert werden, wenn Sie ein anderes Antivirenprodukt auf einem Windows 11/10 -Gerät installiert haben. In diesem Beitrag von php.cn lehrt Sie, wie Sie das periodische Scannen auf WI aktivieren/deaktivieren können

Haben Sie jemals auf das Thema „Excel -Hyperlinks funktionieren“ gestoßen? Wissen Sie, wie man damit umgeht? In diesem Beitrag von Php.cn können Sie mehrere praktikable Lösungen erhalten, um dieses Problem zu beseitigen. Und Sie kennen ein professionelles Datenwiederherstellungstool t


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung