[JAVA] Zertifizierung / Autorisierung mit Spring Security & Thymeleaf

Was ist Frühlingssicherheit?

Spring Security ist ein Framework, das Authentifizierungs- und Autorisierungsfunktionen für mit Spring erstellte Anwendungen bereitstellt. Sie können Ihrer Webanwendung die folgenden Funktionen hinzufügen, indem Sie einige Einstellungen hinzufügen.

Annahme

Was ist diesmal zu tun?

Dieses Mal verwenden wir die Spring Security-Funktion, um Folgendes zu erreichen:

--Authentifizierung --Form Authentifizierung mit Benutzer und Passwort

Dieses Mal beschreiben wir das Verfahren zum Aktivieren der Sicherheit für die Spring Boot-Anwendung.

Bibliotheksversion

Spring Boot verwendet die Serie 1.4 und Spring Securiry die Serie 4.x. Bitte beachten Sie, dass die Grammatik völlig unterschiedlich ist, wenn die Versionen unterschiedlich sind.

Beispielcode

Der Beispielcode, der tatsächlich funktioniert, wird auf GitHub veröffentlicht. Wenn Sie den Code lesen können, besuchen Sie bitte Folgendes direkt.

Vorbereitung

Fügen Sie abhängige Bibliotheken hinzu

Dieses Mal werden wir die Serverseite mit Spring Boot erstellen und den Bildschirm mit Tymeleaf als Template-Engine zeichnen. Dafür werden folgende Bibliotheken benötigt.

Darüber hinaus sind die folgenden Bibliotheken erforderlich, um die Spring Securirty-Funktion zu aktivieren.

Fügen wir dieses Mal die folgenden Bibliotheken hinzu, um Spring Security und Tymeleaf zu integrieren.

Zusammenfassend werden die folgenden Einstellungen zu "build.gradle" hinzugefügt.

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.4.1.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.4.1.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-security:1.4.1.RELEASE")
    compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4:2.1.3.RELEASE")
    compile("org.springframework.security:spring-security-core:4.2.3.RELEASE")
    compile("org.springframework.security:spring-security-web:4.2.3.RELEASE")
    compile("org.springframework.security:spring-security-config:4.2.3.RELEASE")
}

Controller Erstellen Sie zunächst einen Bildschirm für den Administrator und einen Bildschirm für allgemeine Benutzer. Verwenden Sie für Administratoren "AdminController" und für allgemeine Benutzer "UserController".

@Controller
@RequestMapping("/admin")
@Slf4j
public class AdminController {

    @RequestMapping
    public String index() {
        return "admin";
    }
}
@Controller
@RequestMapping("/user")
@Slf4j
public class UserController {

    @RequestMapping
    public String index() {
        return "user";
    }

}

Template Bereiten Sie die Tymeleaf-Vorlage vor, die dem obigen Controller entspricht. Nehmen wir "admin.html" bzw. "user.html" an (Einzelheiten finden Sie im Beispielcode).

Danach erstellen Sie "Application.java" gemäß der SpringBoot-Methode, und wenn "gradle bootRun" erfolgreich ist, können Sie loslegen.

Implementierungsbeispiel

Nun, da wir bereit sind, gehen wir zu Spring Security über.

Config Erstellen Sie zunächst eine Konfigurationsklasse, um Spring Security zu aktivieren. Spring Security wird aktiviert, indem eine Klasse bereitgestellt wird, die "WebSecurityConfigurerAdapter" erbt und "@ EnableWebSecurity" hat.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private static String ROLE_USER = "USER";
    private static String ROLE_ADMIN = "ADMIN";

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/user").hasAnyRole(ROLE_USER, ROLE_ADMIN)
                .antMatchers("/admin").hasRole(ROLE_ADMIN)
                .and()

                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/user")
                .usernameParameter("username")
                .passwordParameter("password")
                .permitAll()
                .and()

                .logout()
                .permitAll()
                .and()

                .csrf();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
                .antMatchers("/*.html", "/*.css")
                .antMatchers("/bootstrap/**");
    }

}

Um kurz zu erklären, was wir im obigen Beispiel tun:

So was. Ich denke, dass die Implementierung so ist, dass Sie sich die Einstellungen vorstellen können.

Dieses Mal müssen wir eine Instanz von "TemplateResolver" in "SpringTemplateEngine" festlegen, um mit Tymeleaf arbeiten zu können. Die spezifische Implementierung ist wie folgt.

@Autowired
public TemplateResolver templateResolver;

@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.addDialect(new SpringSecurityDialect());
    engine.setTemplateResolver(templateResolver);
    return engine;
}

Legen Sie außerdem den Benutzernamen und das Kennwort fest, die für die Authentifizierung verwendet werden. Dieses Mal wird es zur Vereinfachung der Implementierung im Speicher und nicht in der Datenbank festgelegt. Siehe Beispielcode für "UserDto".

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    UserDto support = supportUser();
    UserDto admin = adminUser();

    auth.inMemoryAuthentication()
        .withUser(support.getUsername()).password(support.getPassword()).roles(ROLE_USER)
        .and()
        .withUser(admin.getUsername()).password(admin.getPassword()).roles(ROLE_ADMIN);
}

@Bean
@ConfigurationProperties("inmotion.admin")
public UserDto adminUser() {
    return new UserDto();
}

@Bean
@ConfigurationProperties("inmotion.user")
public UserDto supportUser() {
    return new UserDto();
}

Ich werde den tatsächlichen Benutzernamen und das Passwort in application.yml behalten.

inmotion:
  user:
    username: user
    password: pass12345
  admin:
    username: admin
    password: pass12345

Controller Bereiten Sie danach einen Controller vor, der dem Anmeldebildschirm entspricht.

@Controller
public class AuthenticationController {

    @RequestMapping({"/", "/login"})
    public String login(@RequestParam(value = "error", required = false) String error, Model model) {
        if (error != null) {
            //Verarbeitung zur Ausgabe einer Fehlermeldung
        }
        return "login";
    }

}

Template Sie müssen lediglich ein Anmeldeformular für POST mit "/ login" erstellen.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
    <form class="form-signin" method="post" th:action="@{/login}">
        <div class="alert alert-dismissible alert-danger" th:if="${errorMessage}">
            <button type="button" class="close" data-dismiss="alert">×</button>
            <p th:text="${errorMessage}"></p>
        </div>
        <h2 class="form-signin-heading">Please sign in</h2>
        <label for="username" class="sr-only">Username</label>
        <input type="text" id="username" name="username" class="form-control" placeholder="UserName"/>
        <label for="password" class="sr-only">Password</label>
        <input type="password" id="password" name="password" class="form-control" placeholder="Password"/>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    </form>
</div>
</body>
</html>

Starten Sie die Anwendung mit gradle bootRun und

Lass uns nachsehen.

Referenzmaterial

Recommended Posts

Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Spring Security-Nutzungsnotiz Authentifizierung / Autorisierung
Implementierte Authentifizierungsfunktion mit Spring Security ②
Implementierte Authentifizierungsfunktion mit Spring Security ①
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
Fügen Sie mit Spring Security Ihre eigenen Authentifizierungselemente hinzu
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Anmeldefunktion mit Spring Security
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Erfahren Sie mehr über die Architektur der Spring Security-Authentifizierungsverarbeitung
Oauth2-Authentifizierung mit Spring Cloud Gateway
Beim Testen der Formularauthentifizierung mit Spring Security tritt ein 404-Fehler auf
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Verwenden Sie Spring Security JSP-Tags mit FreeMarker
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
Wie Spring Security mit Hello World funktioniert
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Hash-Passwörter mit Spring Boot + Spring Security (mit Salt, mit Stretching)
Machen Sie HTML-Seiten mit Thymeleaf dynamisch (Frühling + Gradle)
Erstellen Sie eine CRUD-App mit Spring Boot 2 + Thymeleaf + MyBatis
Erstellen Sie mit Spring Boot 2.0 einen Spring Cloud Config Server mit Sicherheit
Erstellen Sie ein WEB-System mit Spring + Doma + H2DB + Thymeleaf
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Spring Security erhöht 403 verboten
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Generieren Sie JavaScript mit Thymeleaf
Lassen Sie uns den Ablauf der Erteilung des Autorisierungscodes mit Spring Security OAuth-Part 1: Review of OAuth 2.0 erleben
Versuchen Sie, mit Keycloak mit Spring Security SAML (Spring 5) zu arbeiten.
Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf
Frühling mit Kotorin ―― 1. SPRING INITIALIZR
Mit Spring Boot herunterladen
Erstellen Sie eine API-Schlüsselauthentifizierung für die Web-API in Spring Security
Fügen Sie mit Spring Security Ihre eigenen Authentifizierungselemente hinzu
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Melden Sie sich mit HttpServletRequest # in Spring Security in der Servlet 3.x-Umgebung an
Generieren Sie mit Spring Boot einen Barcode
Verwenden Sie Thymeleaf mit Azure-Funktionen
Hallo Welt mit Spring Boot
Java-Konfiguration mit Spring MVC
Grundlegende Authentifizierung mit Java 11 HttpClient
Spring Security-Nutzungsnotiz CSRF
Frühling mit Kotorin --- 8. Aufbewahrungsschicht
Beginnen Sie mit Spring Boot
Spring Security-Nutzungsnotiz Run-As
Hallo Welt mit Spring Boot!
Feder mit Kotorin --6 Asynchrone Verarbeitung
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
[Java] Thymeleaf Basic (Spring Boot)
Sicherheit der Verwendungsnotizmethode für Spring Security
Spring Security-Nutzungsnotiz Remember-Me
Feder mit Kotorin ―― 7. Serviceschicht
Verwenden von Mapper mit Java (Spring)
Spring Boot beginnend mit Docker