Heim  >  Artikel  >  Java  >  Wie SpringBoot SpringSecurity schnell integriert

Wie SpringBoot SpringSecurity schnell integriert

WBOY
WBOYnach vorne
2023-05-16 21:56:28971Durchsuche

1. Was ist SpringSecurity?

Spring Security ist ein Sicherheitsframework, das auf dem Spring-Framework basiert und eine Reihe einfacher APIs und Tools zur Implementierung allgemeiner Sicherheitsfunktionen wie Authentifizierung, Autorisierung und Angriffsprävention bereitstellt. Es unterstützt verschiedene Authentifizierungsmethoden, wie z. B. Basisauthentifizierung, Formularauthentifizierung, OAuth3.0 und OpenID Connect usw. Entwickler können es entsprechend den Anforderungen der Anwendung anpassen, da Spring Security über eine große Anzahl konfigurierbarer Optionen verfügt. Spring Security hat sich zu einem der am weitesten verbreiteten Sicherheitsframeworks für Java-Unternehmensanwendungen entwickelt.

2. Das Prinzip von SpringSecurity

Das Hauptprinzip von Spring Security besteht darin, Anwendungsressourcen durch die Filterkette zu schützen. Unterschiedliche Sicherheitsfunktionen werden durch unterschiedliche Filter in der Filterkette übernommen, wie z. B. Authentifizierung, Autorisierung, Angriffsabwehr usw.

Wenn eine Anfrage die Anwendung erreicht, wird sie zunächst vom äußersten Filter abgefangen. Dieser Filter leitet die Anfrage an den nächsten Filter weiter und führt davor einige Vorverarbeitungen durch, wie z. B. Protokollierung und ursprungsübergreifende Anfragebearbeitung usw. Jeder Filter wird in der Filterkette nacheinander ausgeführt, bis der innerste Filter die Anfrage verarbeitet und eine Antwort zurückgegeben hat.

Spring Security schützt Anwendungsressourcen durch die Konfiguration von Filterketten. Jeder Filter hat unterschiedliche Verantwortlichkeiten, wie zum Beispiel:

(1) AuthenticationFilter: Authentifizierungsfilter, der zur Authentifizierung von Benutzern verwendet wird.

(2) AuthorizationFilter: Autorisierungsfilter, mit dem überprüft wird, ob der Benutzer die Berechtigung zum Zugriff auf eine Ressource hat.

(3) CsrfFilter: Cross-Site Request Forgery Prevention (CSRF)-Filter, der zur Verhinderung von CSRF-Angriffen verwendet wird.

(4) ExceptionTranslationFilter ist ein Filter, der sicherheitsrelevante Ausnahmen behandelt und für die Konvertierung von Ausnahmen verantwortlich ist.

(5) SessionManagementFilter: Sitzungsverwaltungsfilter, der zum Verwalten von Benutzersitzungen verwendet wird.

Entwickler können ihre eigenen Sicherheitsrichtlinien basierend auf den von Spring Security bereitgestellten APIs und Tools anpassen und sie der Filterkette hinzufügen. Wenn eine Anwendung eine Anfrage erhält, schützt sie ihre Ressourcen gemäß diesen Sicherheitsrichtlinien.

3. SpringBoot integriert SpringSecurity

Abhängigkeiten hinzufügen

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Security konfigurieren

# 设置默认用户
spring.security.user.name=user
spring.security.user.password=pass

# 关闭CSRF保护
spring.security.csrf.enabled=false

Sicherheitskonfigurationsklasse schreiben. Schreiben Sie eine Sicherheitskonfigurationsklasse, um Spring Security zu konfigurieren. Diese Klasse sollte WebSecurityConfigurerAdapter erweitern und einige Methoden zum Konfigurieren der Sicherheit überschreiben.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    // 配置用户信息
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password("{noop}pass").roles("USER");
    }
    
    // 配置HTTP请求安全性
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll() // 允许/public/**路径下的所有请求
            .anyRequest().authenticated() // 所有其他请求都需要身份验证
            .and()
            .formLogin() // 启用表单登录
            .loginPage("/login") // 指定登录页面
            .defaultSuccessUrl("/", true) // 登录成功后重定向到主页
            .permitAll() // 允许所有用户访问登录页面
            .and()
            .logout() // 启用注销
            .logoutUrl("/logout") // 注销URL
            .logoutSuccessUrl("/login") // 注销成功后重定向到登录页面
            .permitAll(); // 允许所有用户注销
    }
}

In der obigen Konfiguration haben wir eine In-Memory-Authentifizierung (mit Benutzername und Passwort) und HTTP-Anforderungssicherheit konfiguriert (Anfragen unter bestimmten Pfaden zulassen, Authentifizierung für alle anderen Anfragen erfordern und Formularanmeldung und -abmeldung aktivieren).

Schreiben Sie einen Controller. Schließlich müssen Sie einen Controller schreiben, der Anmelde- und Abmeldeanfragen verarbeitet.

@Controller
public class LoginController {
    
    // 处理登录请求
    @GetMapping("/login")
    public String login() {
        return "login";
    }
    
    // 处理注销请求
    @PostMapping("/logout")
    public String logout() {
        return "redirect:/login?logout=true";
    }
}

Wir definieren im Code eine Methode namens login(), um die Anforderung der Anmeldeseite zu verarbeiten und eine Vorlage namens login zurückzugeben. Die Methode logout() wird verwendet, um die Abmeldeanforderung zu verarbeiten und zur Anmeldeseite weiterzuleiten.

HTML-Vorlage schreiben. Schließlich müssen wir eine Vorlage namens login.html schreiben, um die Anmeldeseite darzustellen.

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <form action="/login" method="post">
        <div>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" required autofocus />
        </div>
    </form>
</body>
</html>

Das obige ist der detaillierte Inhalt vonWie SpringBoot SpringSecurity schnell integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen