English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Security bietet seinen eigenen integrierten Login-Modul an, um Benutzer zu authentifizieren. Es überprüft Benutzeranmeldedaten und gewährt den Zugriff auf die Anwendung.
Das Modul, das von diesem Modul vorgestellte Login-Seite ist integriert. Daher müssen wir keine neuen JSP-Seiten erstellen. Aber was tun wir, wenn wir die Login-Seite anpassen möchten?
Die Antwort ist, dass wir unsere eigene JSP-Login-Seite erstellen und in die Anwendung integrieren können. In diesem Thema werden wir eine benutzerdefinierte Login-Seite erstellen und sie zum Anmelden verwenden.
Siehe Beispiel. Erstellen Sie ein Maven-Projekt, indem Sie folgende Details bereitstellen.
Nach Abschluss wird es die folgende Projektstruktur erstellen.
Konfigurieren Sie das Projekt, um Spring Security anzuwenden. Es werden folgende vier Dateien benötigt. Erstellen Sie ein Paket com.w3codebox und diese Dateien in sie einfügen.
//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 Methoden Stub 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
package com.w3codebox; import org.springframework.context.annotation.*; //import org.springframework.security.config.annotation.authentication.builders.*; 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.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @EnableWebSecurity @ComponentScan("com.w)3codebox") public class WebSecurityConfig extends WebSecurityConfigurerAdapter {}} @Bean public UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withDefaultPasswordEncoder() .username("irfan").password("khan123").roles("ADMIN").build()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/index", "/user","/").permitAll() .antMatchers("/admin").authenticated() .and() .formLogin() .loginPage("/login() .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout()}); } }
请参阅,在configure方法中,在formLogin()之后,使用方法 loginPage("/login()。这是调用自定义登录页面所需的实际方法。
首先创建我们自己的登录页面。根据Spring官方的说法,登录页面应如下所示。
//login.jsp
<%@ 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> 无效的用户名和密码。 </p> </c:if> <c:if test="${param.logout != null}"> p> You have been logged out. </p> </c:if> p> <label for="username">Username</label>/label> <input type="text" id="username" name="username"/> </p> p> <label for="password">Password</label>/label> <input type="password" id="password" name="password"/> </p> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <button type="submit" class="btn">Log in</button>/button> </form>
//index.jsp
<html> <head> <title>Home Page</title>/title> </head> <body> <h3> Welcome to w3codebox! <br>/h3> <a href="admin">Login here</a>/a> </body> </html>
//admin.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Home Page</title>/title> </head> <body> Login Successful! <a href="logout">logout</a>/a> </body> </html>
In com.w3In dem Paket codebox.controller wird ein Controller HomeController erstellt.
//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"; } }
//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.w3codebox</groupId> <artifactId>springcustomlogin</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</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> <artifactId>spring-webmvc</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-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> <artifactId>spring-security-config</artifactId> <version>5.0.4.RELEASE</version> </dependency> !-- https://mvnrepository.com/artifact/javax.servlet-api/javax.servlet-api-api --> <dependency> <groupId>javax.servlet</groupId>/groupId> <artifactId>javax.servlet-api</artifactId>-api/artifactId> <version>3.1.0/version> <scope>provided</scope>/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>
Unser Projekt sieht folgendermaßen aus:
Ausgabe:
Melden Sie sich jetzt durch die Eingabe Ihrer Anmeldeinformationen an.
Sieht aus, als ob es funktioniert. Jetzt können wir nach Bedarf noch dekorativer und personalisiertere Dekorationen erstellen.