Für diejenigen, die mit der Arbeit an Spring Quickstart Guide fertig sind, diejenigen, die angefangen haben, Spring Boot zu lernen, und diejenigen, die eine Überprüfung durchführen möchten
Teilen Sie mit, was Sie gelernt haben, indem Sie tatsächlich am offiziellen Handbuch Sichern einer Webanwendung arbeiten.
Überprüfen Sie das ausgefüllte Formular. Es gibt eine Top-Seite, klicken Sie hier,
Gehen Sie zur Anmeldeseite. Geben Sie den Benutzernamen und das Kennwort für den Testbenutzer ein und klicken Sie auf die Schaltfläche Anmelden.
Sie werden zu einer Seite weitergeleitet, die nur von authentifizierten Personen angezeigt werden kann. Sie können nicht auf diesen Bildschirm zugreifen, wenn Sie nicht angemeldet sind.
Die Entwicklungsumgebung und die Überprüfung sind wie folgt.
Entwicklungsumgebung
Betriebssystem: macOS Mojave Version 10.14.6
Texteditor: Visual Studio Code (im Folgenden VSCode)
Java: 11.0.2
QuickstartGuide Erstellen eines RESTful-Webdienstes Konsumieren eines RESTful-Webdienstes Zugriff auf Daten mit JPA Übermittlung des Formulars Sichern einer Webanwendung
Gehen Sie zunächst zu spring initializr.
Klicken Sie dann auf die Schaltfläche "GENERATE", um die Zip-Datei herunterzuladen.
Extrahieren Sie die heruntergeladene Zip-Datei und Sie können loslegen.
Öffnen Sie den vorherigen Ordner mit VS Code. Wir empfehlen, das Java Extension Pack für Erweiterungen zu installieren. Es wird gesagt, dass Sie es installieren sollten.
Erstellen Sie eine home.html-Datei in src / main / resources / templates /
.
Fügen Sie den Code hinzu, der sich auf die Formel bezieht. Es wird die oberste Seite sein.
home.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security Example</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Click <a th:href="@{/hello}">here</a> to see a greeting.</p>
</body>
</html>
Der HTML-Tag-Teil dient zum Schreiben von th: 〇〇
und sec: 〇〇
(eine Beschreibungsmethode unter Verwendung von Thymeleaf- und Spring Security-Tags ist möglich).
Lassen Sie uns nun die Beschreibung von Thymeleaf im hinzugefügten Code genauer untersuchen.
thymeleaf ist eine Template-Engine, die von springboot verarbeitet werden kann. Beschrieben als th: 〇〇. [Thymeleaf-Tutorial] in japanischer Sprache (https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf_ja.html#thymeleaf%E3%81%AE%E7%B4%B9%E4%BB%) Es gibt auch 8B)!
th:href
Dieses Tag wird im href-Attribut des a-Tags festgelegt. Die Beschreibungsmethode lautet th: href =" @ {} "
.
Geben Sie den Pfad in {}
an. Diesmal ist es "/ hello". Wenn Sie also auf das Tag klicken, wechselt es zu "http: // localhost: 8080 / hello".
Erstellen Sie eine hello.html-Datei in src / main / resources / templates /
.
Fügen Sie den Code hinzu, der sich auf die Formel bezieht.
hello.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<h1 th:inline="text">Hello [[${#httpServletRequest.remoteUser}]]!</h1>
<form th:action="@{/logout}" method="post">
<input type="submit" value="Sign Out"/>
</form>
</body>
</html>
th: inline
dient zum Erweitern des Werts einer Variablen im Text des Tags. Fügen Sie die Variablen, die Sie anzeigen möchten, in [[...]] ein.
Dieses Mal ist es "$ {# httpServletRequest.remoteUser}", sodass der Name des authentifizierten Benutzers angezeigt wird.
Wenn Sie auf die Schaltfläche "Abmelden" klicken, werden Sie zu "/ login? Logout" weitergeleitet.
Erstellen Sie eine MvcConfig.java-Datei in src / main / java / com / example / securingweb /
.
Fügen Sie den Code hinzu, der sich auf die Formel bezieht.
MvcConfig.java
package com.example.securingweb;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcConfig implements WebMvcConfigurer {
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/").setViewName("home");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/login").setViewName("login");
}
}
Die Annotation ** @ Configuration
** wird der Klasse gegeben, damit verschiedene Einstellungen von Spring in Java-Code ausgeführt werden können. (Klasse einstellen)
Ich habe eine MvcConfig-Klasse erstellt, die die WebMvcConfigurer-Schnittstelle implementiert und die addViewControllers-Methode überschreibt.
registry.addViewController("/home").setViewName("home");
Anstatt einen anderen Controller zu haben und die Annotation "@ GetMapping" zu verwenden, um den Ansichtsnamen zurückzugeben Durch die obige Beschreibung
Wenn die URL "http: // localhost: 8080 / home" lautet, wird auf die Vorlage ** home.html ** verwiesen. Es scheint, dass die URL und die Vorlage zugeordnet sind. Wir werden login.html später implementieren.
Fügen Sie pom.xml Folgendes hinzu, um Spring Security zu verwenden.
Spring Security ist ein Framework zum Hinzufügen von Sicherheitsfunktionen zu Webanwendungen. Bietet umfassende Unterstützung für die Authentifizierung, Autorisierung und den Schutz vor häufigem Missbrauch.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
Erstellen Sie eine WebSecurityConfig.java-Datei in src / main / java / com / example / securingweb /
.
Fügen Sie den Code hinzu, der sich auf die Formel bezieht.
WebSecurityConfig.java
package com.example.securingweb;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
String password = passwordEncoder().encode("password");
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("user").password(password).roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Wir werden uns eingehender mit dem hinzugefügten Code befassen.
@ EnableWebSecurity
und WebSecurityConfigurerAdapter
WebSecurityConfig.java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//Kürzung
}
Spring Security wird durch Hinzufügen der Annotation "@ EnableWebSecurity" aktiviert. Und es erbt eine abstrakte Klasse namens "WebSecurityConfigurerAdapter". Überschreiben Sie die ** configure-Methode ** in dieser Klasse Wir werden implementieren, ob der Seitenzugriff eingeschränkt werden soll oder nicht.
WebSecurityConfig.java
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll() //URLs, für die keine Zugriffsbeschränkungen erforderlich sind
.anyRequest().authenticated() //Andere URLs erfordern eine Authentifizierung. Sie können nur darauf zugreifen, wenn Sie authentifiziert sind
.and()
.formLogin()
.loginPage("/login") //Keine Zugriffsbeschränkungen auf dem Anmeldebildschirm
.permitAll() //Keine Authentifizierung erforderlich
.and()
.logout()
.permitAll(); //Keine Authentifizierung erforderlich
}
Überschreiben der ** Konfigurationsmethode **. HttpSecurity wird als Argument empfangen und ist eine Methode zum Beschreiben der Einstellungen für den Teil, der sich auf die http-Anforderung bezieht. Legt fest, ob beim Anmelden, Abmelden oder beim Zugriff auf andere Seiten eine Authentifizierung erforderlich ist.
Die Implementierung dieses Teils wurde als veraltet bezeichnet, wenn Sie den offiziellen Leitfaden befolgten. Es hat also eine etwas andere Implementierung.
WebSecurityConfig.java
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//Passwort verschlüsseln
String password = passwordEncoder().encode("password");
//Einstellungen für die In-Memory-Authentifizierung
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("user").password(password).roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
** PasswordEncoder passwordEncoder ()
** definiert eine Methode zum Hashing von Passwörtern.
Dann wird das Passwort der Zeichenkette mit "String password = passwordEncoder (). Encode (" password ");" gehasht.
AuthenticationManagerBuilder ist eine Klasse, die die speicherinterne Authentifizierung aktiviert.
python
//Einstellungen für die In-Memory-Authentifizierung
auth.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser("user").password(password).roles("USER");
}
Wir implementieren es hier und setzen den Benutzer auf Authentifizierung.
Erstellen Sie eine login.html-Datei in src / main / resources / templates /
.
Fügen Sie den Code hinzu, der sich auf die Formel bezieht. Es wird die Anmeldeseite sein.
login.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Spring Security Example </title>
</head>
<body>
<div th:if="${param.error}">
Invalid username and password.
</div>
<div th:if="${param.logout}">
You have been logged out.
</div>
<form th:action="@{/login}" method="post">
<div><label> User Name : <input type="text" name="username"/> </label></div>
<div><label> Password: <input type="password" name="password"/> </label></div>
<div><input type="submit" value="Sign In"/></div>
</form>
</body>
</html>
In einem Feld können Sie den Benutzernamen und das Passwort eingeben.
th: if =" $ {param.error}
ist der Bereich, der angezeigt wird, wenn die Benutzerauthentifizierung fehlschlägt.
th: if =" $ {param.logout}
ist der Bereich, der beim Abmelden angezeigt wird (angezeigt, nachdem die Schaltfläche Abmelden in hello.html gedrückt wurde).
Nachdem die Anwendung nun ausgeführt werden kann, überprüfen wir sie.
Geben Sie den folgenden Befehl in das Terminal ein und drücken Sie die Eingabetaste.
Terminal
$ ./mvnw spring-boot:run
Die obere Seite wird angezeigt.
Klicken Sie hier, um zur Anmeldeseite zu gelangen.
Geben Sie einen geeigneten Benutzernamen und ein Passwort ein und klicken Sie auf die Schaltfläche Anmelden.
Die Anmeldeseite wird erneut angezeigt und die Fehlermeldung wird ebenfalls angezeigt. Geben Sie als Nächstes "Benutzer" in den Benutzernamen und "Passwort" in das Passwort ein und klicken Sie auf die Schaltfläche "Anmelden".
Ich konnte zu einer Seite wechseln, die nur von authentifizierten Personen angezeigt werden kann.
Wenn Sie auf die Schaltfläche Abmelden klicken,
Sie werden zur Anmeldeseite weitergeleitet und sehen eine Nachricht.
Danke für deine harte Arbeit. erledigt!
** Alternative zu veraltet für User.withDefaultPasswordEncoder () ** ** [Spring Security wurde gestartet] # 2 Benutzerauthentifizierung ** ** "Hallo Welt!" Mit Frühlingssicherheit **
Recommended Posts