Heim Backend-Entwicklung PHP-Tutorial Java-Backend-Entwicklung: API-Sicherheit mit Spring Security

Java-Backend-Entwicklung: API-Sicherheit mit Spring Security

Jun 17, 2023 am 09:49 AM
java后端 api安全 spring security

Mit dem Wachstum moderner Webanwendungen sind APIs zu einem wichtigen Bestandteil der Webentwicklung geworden. Diese APIs können von mobilen Geräten, Webanwendungen und anderen Diensten aufgerufen werden, daher ist die API-Sicherheit von entscheidender Bedeutung. In der Java-Backend-Entwicklung ist Spring Security eine beliebte Wahl, da es ein leistungsstarkes Framework zum Schutz und zur Verwaltung der Sicherheit von APIs bietet.

Spring Security ist ein leistungsstarkes und flexibles Framework, das APIs dabei helfen kann, Benutzerdaten sicherer zu schützen. Es basiert auf dem Spring-Framework, verfügt über einen Sicherheitsmechanismus und bietet viele Sicherheitsfunktionen wie Authentifizierung, Autorisierung, Single Sign-On, Passwortverwaltung usw. In diesem Artikel konzentrieren wir uns darauf, wie Sie Spring Security in einem Java-Backend verwenden, um Ihre API zu sichern.

Es gibt die folgenden Schritte, um Spring Security zum Implementieren der API-Sicherheit zu verwenden:

  1. Spring Security konfigurieren

Der wichtigste Teil der Konfiguration von Spring Security ist die SecurityConfig-Klasse. In dieser Klasse müssen wir definieren, welche URLs sicher verwaltet und welche freigegeben werden müssen. Wir können hier auch Authentifizierungs- und Autorisierungsmechanismen definieren.

Beispielcode:

@Configuration
@EnableWebSecurity
public class SecurityConfig erweitert WebSecurityConfigurerAdapter {
@Autowired
private AuthUserDetailsService userDetailsService;

@Autowired
private CustomAuthenticationProvider authProvider;

@Override
public void configure(AuthenticationManagerBuilder auth) löst eine Ausnahme aus {

   auth.authenticationProvider(authProvider);
   auth.userDetailsService(userDetailsService);
Nach dem Login kopieren

}

@Override
protected void configure(HttpSecurity http) löst eine Ausnahme aus {

   http.authorizeRequests()
       .antMatchers("/admin/**").hasAuthority("ADMIN")
       .antMatchers("/api/**").authenticated()
       .and()
       .csrf().disable()
       .formLogin().disable()
       .httpBasic();
Nach dem Login kopieren

}

}

Im obigen Beispielcode definieren wir die SecurityConfig-Klasse, die die von Spring bereitgestellte WebSecurityConfigurerAdapter-Klasse erbt. Wir verwenden die Annotation @Autowired, um unseren eigenen userDetailsService und authProvider zur Authentifizierung von Benutzerinformationen einzufügen. In der Methode configure() definieren wir, welche URLs sicher verwaltet werden müssen, zum Beispiel: /admin/ erfordert ADMIN-Berechtigungen für den Zugriff, /api/ erfordert eine Authentifizierung vor dem Zugriff.

  1. Implementieren einer benutzerdefinierten Authentifizierung

Die Authentifizierung ist oft einer der komplexesten Teile einer Spring-Anwendung. Der benutzerdefinierte Authentifizierungsmechanismus des Spring Security-Frameworks ermöglicht uns die einfache Implementierung der Authentifizierung in unseren Anwendungen.

Wir können die Authentifizierungslogik anpassen, indem wir die Authenticate-Methode (Authentifizierungsauthentifizierung) der AuthenticationProvider-Schnittstelle überschreiben. Der Beispielcode lautet wie folgt:

öffentliche Klasse CustomAuthenticationProvider implementiert AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
         String username = authentication.getName();
         String password = authentication.getCredentials().toString();

         AuthUserDetails user = userDetailsService.loadUserByUsername(username);

         if (!passwordEncoder.matches(password, user.getPassword())) {
               throw new BadCredentialsException("Invalid username or password");
         }

         List<GrantedAuthority> authorities = new ArrayList<>();
         for (AuthRole role : user.getAuthorities()) {
               authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
         }

         return new UsernamePasswordAuthenticationToken(user.getUsername(), null, authorities);
   }

  @Override
  public boolean supports(Class<?> authentication) {
         return authentication.equals(UsernamePasswordAuthenticationToken.class);
  }
Nach dem Login kopieren

}

Im obigen Code erklären wir Zeile für Zeile die Logik der benutzerdefinierten Authentifizierung. Rufen Sie zunächst die eingehenden Benutzerauthentifizierungsinformationen ab und authentifizieren Sie sich dann über den benutzerdefinierten Authentifizierungsdienst. Wenn Benutzername und Passwort korrekt sind, wird das Authentication-Objekt zurückgegeben, andernfalls wird eine BadCredentialsException ausgelöst. Wenn die Authentifizierung erfolgreich ist, wird schließlich ein UsernamePasswordAuthenticationToken-Objekt zurückgegeben, über das Spring Security die nachfolgende Authentifizierungs- und Autorisierungsverarbeitung durchführt.

  1. Rollenautorisierungsmechanismus implementieren

Wir können die @PreAuthorize-Annotation in Spring Security verwenden, um zu definieren, welche Rollen auf welche Ressourcen zugreifen können. In dieser Annotation können wir die Rollen definieren, die wir in der SecurityConfig-Klasse definiert haben.

Beispielcode:

@RestController
@RequestMapping("/api/v1/users")
öffentliche Klasse UserController {

@Autowired
private UserService userService;

@GetMapping("/")
@PreAuthorize("hasAuthority('USER')")
public List<UserDTO> getUsers() {
    List<User> users = userService.getUsers();
    return UserMapper.toDtos(users);
}

@PostMapping("/")
@PreAuthorize("hasAuthority('ADMIN')")
public void createUser(@RequestBody UserDTO userDTO) {
    User user = UserMapper.toEntity(userDTO);
    userService.createUser(user);
}
Nach dem Login kopieren

}

Im obigen Code definieren wir eine Benutzer-Controller-Klasse, die zwei Methoden getUser enthält () und createUser() für die Sicherheitsautorisierung durch die Annotation @PreAuthorize. Die @PreAuthorize-Annotation der getUser()-Methode lautet „hasAuthority(‘USER‘)“, was der in der SecurityConfig-Klasse definierten Rolle entspricht. Ebenso lautet die @PreAuthorize-Annotation der Methode createUser() „hasAuthority(‘ADMIN‘)“, was der in der SecurityConfig-Klasse definierten Rolle entspricht.

Fazit:

Mit dem Spring Security-Framework können Sie Ihre API ganz einfach sichern. Durch die Anpassung der Authentifizierungs- und Rollenautorisierungsmechanismen können wir Anwendungen sicherer machen. Wenn Sie Spring Security für die API-Sicherheitsverwaltung verwenden, müssen Sie die Sicherheitsanforderungen der Anwendung berücksichtigen und diese dann schrittweise entsprechend den Anforderungen konfigurieren und implementieren.

Das obige ist der detaillierte Inhalt vonJava-Backend-Entwicklung: API-Sicherheit mit Spring Security. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

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 vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Spring Security 6: cors() ist veraltet und zum Entfernen markiert Spring Security 6: cors() ist veraltet und zum Entfernen markiert Feb 10, 2024 pm 11:45 PM

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

So entwickeln Sie ein Spring Security SAML-basiertes Single-Sign-On-System mit Java So entwickeln Sie ein Spring Security SAML-basiertes Single-Sign-On-System mit Java Sep 22, 2023 am 08:49 AM

So entwickeln Sie mit Java ein Single-Sign-On-System basierend auf SpringSecuritySAML. Einführung: Mit der rasanten Entwicklung des Internets werden immer mehr Anwendungen entwickelt. In diesen Anwendungen ist die Benutzeranmeldung eine der häufigsten Funktionen. Bei Anwendungen auf Unternehmensebene müssen sich Benutzer jedoch bei mehreren Systemen anmelden, was zu einer sehr schlechten Benutzeranmeldeerfahrung führt. Um dieses Problem zu lösen, wurde das Single-Sign-On-System (SingleSign-On, kurz SSO) entwickelt. einfach

Welche fünf Java-Karriereoptionen passen am besten zu Ihnen? Welche fünf Java-Karriereoptionen passen am besten zu Ihnen? Jan 30, 2024 am 10:35 AM

In der Java-Branche gibt es fünf Beschäftigungsrichtungen. Welche ist für Sie geeignet? Java erfreut sich als weit verbreitete Programmiersprache im Bereich der Softwareentwicklung seit jeher großer Beliebtheit. Aufgrund der starken plattformübergreifenden Natur und des umfangreichen Entwicklungsrahmens haben Java-Entwickler vielfältige Beschäftigungsmöglichkeiten in verschiedenen Branchen. In der Java-Branche gibt es fünf Hauptbeschäftigungsrichtungen, darunter JavaWeb-Entwicklung, mobile Anwendungsentwicklung, Big-Data-Entwicklung, eingebettete Entwicklung und Cloud-Computing-Entwicklung. Jede Richtung hat ihre Eigenschaften und Vorteile. Die fünf Richtungen werden im Folgenden besprochen.

GO-Zugriffstoken authentifizieren (Keycloak) GO-Zugriffstoken authentifizieren (Keycloak) Feb 09, 2024 am 09:30 AM

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

Java-Backend-Entwicklung: Erstellen reaktiver APIs mit Akka HTTP Java-Backend-Entwicklung: Erstellen reaktiver APIs mit Akka HTTP Jun 17, 2023 am 11:09 AM

Reaktive Programmierung wird in der heutigen Webentwicklung immer wichtiger. AkkaHTTP ist ein leistungsstarkes HTTP-Framework auf Basis von Akka, das sich zum Erstellen reaktiver APIs im REST-Stil eignet. In diesem Artikel wird die Verwendung von AkkaHTTP zum Erstellen einer reaktiven API vorgestellt und einige praktische Beispiele bereitgestellt. Fangen wir an! Warum sollten Sie sich für AkkaHTTP entscheiden? Bei der Entwicklung reaktiver APIs ist es wichtig, das richtige Framework auszuwählen. AkkaHTTP ist eine sehr gute Wahl, weil

Nutzungshandbuch für das Spring Security-Berechtigungskontroll-Framework Nutzungshandbuch für das Spring Security-Berechtigungskontroll-Framework Feb 18, 2024 pm 05:00 PM

In Back-End-Managementsystemen ist in der Regel eine Zugriffsberechtigungskontrolle erforderlich, um den Zugriff verschiedener Benutzer auf Schnittstellen 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 gängige Back-End-Verwaltungssysteme das Berechtigungskontroll-Framework SpringSecurity einführen. Die Gliederung lautet wie folgt: waynboot-mall-Projektadresse: https://github.com/wayn111/waynboot-mall 1. Was ist SpringSecurity? SpringSecurity ist ein Open-Source-Projekt, das auf dem Spring-Framework basiert und darauf abzielt, leistungsstarke und flexible Sicherheit bereitzustellen für Java-Anwendungen.

So entwickeln Sie mit Java ein Single-Sign-On-System basierend auf Spring Security OAuth2 So entwickeln Sie mit Java ein Single-Sign-On-System basierend auf Spring Security OAuth2 Sep 20, 2023 pm 01:06 PM

So verwenden Sie Java, um ein Single-Sign-On-System basierend auf SpringSecurityOAuth2 zu entwickeln. Einführung: Mit der rasanten Entwicklung des Internets erfordern immer mehr Websites und Anwendungen, dass sich Benutzer anmelden, aber Benutzer möchten sich nicht für jede Website oder Anwendung merken. Eine Kontonummer und ein Passwort. Das Single-Sign-On-System (SingleSign-On, kurz SSO) kann dieses Problem lösen, indem es Benutzern den Zugriff auf mehrere Websites und Anwendungen ohne wiederholte Authentifizierung nach einmaliger Anmeldung ermöglicht. In diesem Artikel wird vorgestellt

Wie gehe ich mit domänenübergreifenden Anforderungen bei der Entwicklung von Java-Backend-Funktionen um? Wie gehe ich mit domänenübergreifenden Anforderungen bei der Entwicklung von Java-Backend-Funktionen um? Aug 05, 2023 am 09:40 AM

Wie gehe ich mit domänenübergreifenden Anforderungen bei der Entwicklung von Java-Backend-Funktionen um? In einem Entwicklungsmodell, in dem Front-End und Back-End getrennt sind, kommt es sehr häufig vor, dass das Front-End Anfragen an die Back-End-API-Schnittstelle sendet, um Daten über JavaScript abzurufen. Aufgrund der Same-Origin-Policy des Browsers gibt es jedoch Einschränkungen bei domänenübergreifenden Anfragen. Eine domänenübergreifende Anforderung bedeutet, dass die Front-End-Seite über AJAX und andere Methoden Server mit unterschiedlichen Domänennamen, unterschiedlichen Ports oder unterschiedlichen Protokollen anfordert. In diesem Artikel wird anhand von Codebeispielen eine gängige Methode zur Verarbeitung domänenübergreifender Anforderungen bei der Entwicklung von Java-Back-End-Funktionen vorgestellt. Domänenübergreifend lösen

See all articles