


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.0
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(); } }
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)); } }
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); } }
- 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!

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

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Kernelsecuritycheckfailure (Kernel-Check-Fehler) ist eine relativ häufige Art von Stoppcode. Unabhängig vom Grund führt der Bluescreen-Fehler jedoch dazu, dass viele Benutzer diese Seite sorgfältig vorstellen. 17 Lösungen für den Bluescreen „kernel_security_check_failure“ Methode 1: Entfernen Sie alle externen Geräte Wenn ein externes Gerät, das Sie verwenden, nicht mit Ihrer Windows-Version kompatibel ist, kann der Bluescreen-Fehler „Kernelsecuritycheckfailure“ auftreten. Dazu müssen Sie alle externen Geräte trennen, bevor Sie versuchen, Ihren Computer neu zu starten.

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

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

So implementieren Sie programmgesteuerte Spring-Transaktionen: 1. Verwenden Sie TransactionCallback und TransactionCallbackWithoutResult; 4. Verwenden Sie TransactionTemplate in Kombination mit @Transactional;

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

Ich versuche, die Zugriffstoken-Validierung mit GO zu implementieren. Aber die Beispiele, die ich online gesehen habe, scheinen nur TOKEN_SECRET zu verwenden, um es zu überprüfen. Aber ich bin es gewohnt, in Javaspring zu programmieren und muss TOKEN_SECRET nicht verwenden. Ich stelle einfach den jwk-set-uri bereit und er prüft die Gültigkeit (automatische Sicherheitsfilter usw.) und ich weiß, dass er mit dem OAuth-Server kommuniziert und diese Validierung durchführt. Gibt es in Go keine Bibliothek, die durch eine Anfrage an den OAuth-Server prüfen kann, ob das Token gültig ist? Ich weiß, dass ich dies manuell tun kann, indem ich eine Anfrage an den Benutzerinfo-Endpunkt des OAuth-Servers stelle: http://localh

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.

Einführung RESTful APIs sind zu einem integralen Bestandteil moderner WEB-Anwendungen geworden. Sie bieten einen standardisierten Ansatz für die Erstellung und Nutzung von Webdiensten und verbessern so die Portabilität, Skalierbarkeit und Benutzerfreundlichkeit. Im Java-Ökosystem sind JAX-RS und springmvc die beiden beliebtesten Frameworks zum Erstellen von RESTful-APIs. In diesem Artikel werfen wir einen detaillierten Blick auf beide Frameworks und vergleichen ihre Funktionen, Vor- und Nachteile, um Ihnen eine fundierte Entscheidung zu erleichtern. JAX-RS: JAX-RSAPI JAX-RS (JavaAPI für RESTful Web Services) ist ein von JavaEE entwickeltes Standard-JAX-RSAPI für die Entwicklung von REST
