suchen
HeimComputer-TutorialsComputerwissenNutzungshandbuch für das Spring Security-Berechtigungskontroll-Framework

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

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.
2. So stellen Sie Spring Security vor

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.0

3. 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.
4. So verwenden Sie Spring Security

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
Um es zusammenzufassen

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!

Stellungnahme
Dieser Artikel ist reproduziert unter:每日运维. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Unterschied zwischen RAID -Erholung und FestplattenwiederherstellungUnterschied zwischen RAID -Erholung und FestplattenwiederherstellungApr 17, 2025 am 12:50 AM

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.

Microsoft Word Löschen von Text Windows 10/11? Repariere es jetzt!Microsoft Word Löschen von Text Windows 10/11? Repariere es jetzt!Apr 17, 2025 am 12:48 AM

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

Wie kann ich den LC-208-Fehlercode auf Overwatch 2 beheben? Hier ist ein Leitfaden! - MinitoolWie kann ich den LC-208-Fehlercode auf Overwatch 2 beheben? Hier ist ein Leitfaden! - MinitoolApr 17, 2025 am 12:47 AM

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.

Google Drive verschwand aus dem Datei Explorer - Easy ApproxesGoogle Drive verschwand aus dem Datei Explorer - Easy ApproxesApr 17, 2025 am 12:46 AM

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

Wie repariere ich Windows 7 Welcome Screen Langsam? Tipps sind da!Wie repariere ich Windows 7 Welcome Screen Langsam? Tipps sind da!Apr 17, 2025 am 12:45 AM

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.

Wie öffne ich den Anmeldeinformationsmanager in Windows 11? 6 Wege für Sie! - MinitoolWie öffne ich den Anmeldeinformationsmanager in Windows 11? 6 Wege für Sie! - MinitoolApr 17, 2025 am 12:44 AM

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.

So aktivieren/deaktivieren Sie periodisches Scannen auf Microsoft Defender - MinitoolSo aktivieren/deaktivieren Sie periodisches Scannen auf Microsoft Defender - MinitoolApr 17, 2025 am 12:43 AM

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

Smart -Techniken für Excel -Hyperlinks funktionieren nicht nach dem SiegSmart -Techniken für Excel -Hyperlinks funktionieren nicht nach dem SiegApr 17, 2025 am 12:42 AM

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

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

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

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung