English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Die "merken Sie sich"-Funktion ermöglicht es dem Benutzer, ohne erneutes Anmelden auf die Anwendung zuzugreifen. Die Anmelde-Sitzung endet, wenn der Browser geschlossen wird. Wenn der Benutzer den Browser erneut öffnet und auf die Anwendung zugreift, wird eine Anmeldeanforderung angezeigt.
Aber wir können die "merken Sie sich"-Funktion verwenden, um das erneute Anmelden zu vermeiden. Es speichert die Identität des Benutzers in einem Cookie oder einer Datenbank und verwendet sie zur Identifizierung des Benutzers.
Wir implementieren diese Identität im folgenden Beispiel. Lassen Sie uns ein Beispiel betrachten.
Erstellen Sie zunächst ein Maven-Projekt und geben Sie die Projektinformationen an.
Am Anfang sah das Projekt so aus:
Konfigurieren Sie das Projekt, um Spring Security zu implementieren. Es werden folgende vier Java-Dateien benötigt. Zunächst erstellen Sie ein Paket com.w3codebox und alle Dateien darin ablegen.
//AppConfig.java
package com.w3codebox; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @EnableWebMvc @Configuration @ComponentScan({ "com.w3codebox.controller.*" )) public class AppConfig { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/ viewResolver.setSuffix(".jsp"); return viewResolver; } }
//MvcWebApplicationInitializer.java
package com.w3codebox; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { WebSecurityConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { // ToDo Auto-generierter Methodenstub return null; } @Override protected String[] getServletMappings() { return new String[] { "/}; } }
//SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
//WebSecurityConfig.java
In diesem Klassensatz erstellen wir auch Benutzer und authentifizieren sie. Die Methode RememberMe() im configure()-Methodenbereich ist verantwortlich für das Speichern und Erinnern der Benutzeridentität.
package com.w3codebox; import org.springframework.context.annotation.*; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.*; import org.springframework.security.core.userdetails.*; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @EnableWebSecurity @ComponentScan("com.w3codebox") public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withDefaultPasswordEncoder() .username("admin").password("admin123).roles("ADMIN").build()); return manager; } @Override geschützt void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/index", "/user","/").permitAll() .antMatchers("/admin").authenticated() .and() .formLogin() .loginPage("/login) .and() .rememberMe() .key("rem-me-key) .rememberMeParameter("remember") // es ist der Name des Kontrollkästchens auf der Login-Seite .rememberMeCookieName("rememberlogin") // es ist der Name des Cookies .tokenValiditySeconds(100) // for number of seconds .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout"); } }
im com.w3codebox.controller Eine Controller-Klasse HomeController wurde im Paket erstellt. Bitte sehen Sie sich den Controller-Code an.
//HomeController.java
package com.w3codebox.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String index() { return "index"; } @RequestMapping(value = "/login", method = RequestMethod.GET) public String login() { return "login"; } @RequestMapping(value = "/admin", method = RequestMethod.GET)} public String admin() { return "admin"; } }
Erstelle eine Ansicht (JSP-Seite), um die Ausgabe in den Browser zu senden.
//index.jsp
<html> <head> <title>Startseite</title> </head> <body> Willkommen in der3codebox! <br> <br> <a href="admin">Admin-Anmeldung</a> </body> </html>
//admin.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Startseite</title> </head> <body> Willkommen Admin! ?? <a href="logout">logout</a> </body> </html>
//login.jsp
Dies ist unsere benutzerdefinierte Login-Seite, in der wir das Kontrollkästchen "Erinnere mich an mich" hinzugefügt haben. Code anzeigen.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:url value="/login" var="loginUrl"/> <form action="${loginUrl}" method="post"> <c:if test="${param.error != null}"> <p> Ungültiger Benutzername und Passwort. </p> </c:if> <c:if test="${param.logout != null}"> <p> Du wurdest abgemeldet. </p> </c:if> <p> <label for="username">Benutzername</label> <input type="text" id="username" name="username"/> </p> <p> <label for="password">Passwort</label> <input type="password" id="password" name="password"/> </p> <p> <label for="remember">Erinnere mich an mich</label> <input type="checkbox" name="remember" /> </p> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <button type="submit" class="btn">Anmelden</button>/button> </form>
Hier ist unsere pom.xml-Datei, die alle erforderlichen Abhängigkeiten enthält.
//pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0/modelVersion> <groupId>com.w</groupId>3codebox/groupId> <artifactId>springrememberme</artifactId>/artifactId> <version>0.0.1-SNAPSHOT/version> <packaging>war</packaging>/packaging> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId>/groupId> <artifactId>spring</artifactId>-webmvc/artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId>/groupId> <artifactId>spring</artifactId>-security-web/artifactId> <version>5.0.0.RELEASE/version> </dependency> <dependency> <groupId>org.springframework.security</groupId>/groupId> <artifactId>spring</artifactId>-security-core/artifactId> <version>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config --> <dependency> <groupId>org.springframework.security</groupId>/groupId> <artifactId>spring</artifactId>-security-config/artifactId> <version>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId>/groupId> <artifactId>javax.servlet</artifactId>-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId>/groupId> <artifactId>jstl</artifactId>/artifactId> <version>1.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId>/groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml>/failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
Nachdem alle Dateien hinzugefügt wurden, sieht die Projektstruktur wie folgt aus:
Ausgabe:
Klicken Sie auf den Admin-Anmeldeverweis und melden Sie sich an.
Siehe, wir haben Klicken Sie auf "Merken Sie mich" Kontrollkästchen.
URL kopieren: http://localhost:8080/springrememberme/admin Und schließen Sie den Browser vollständig. Nachdem Sie den zweiten Browser geöffnet haben, fügen Sie die kopierte URL ein.
Siehe, es wird nicht angefordert, sich anzumelden, und wir werden auf die gleiche Seite angemeldet. Denn wir haben tatsächlich beim Anmelden den "Merken Sie mich"-Knopf ausgewählt.