English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يقدم Spring Security مودل تسجيل الدخول المدمج الخاص به للتحقق من هوية المستخدمين. ويقوم بتحقق من معلومات الاعتماد ويعطي صلاحيات الوصول إلى التطبيق.
الصفحة الخاصة بالدخول التي يقدمها هذا المodule هي مدمجة. لذلك، لا نحتاج إلى إنشاء صفحة jsp جديدة. ولكن، إذا أردنا تخصيص صفحة الدخول، كيف نفعل ذلك؟
الإجابة هي، يمكننا إنشاء صفحة تسجيل الدخول الخاصة بنا ودمجها في التطبيق. في هذا الموضوع، سنقوم بإنشاء صفحة تسجيل الدخول المخصصة ونستخدمها للدخول.
انظر إلى المثال. لإنشاء مشروع Maven، قدم التفاصيل التالية.
بعد إكمالها، سيتم إنشاء بنية المشروع التالية.
تطبيق مشاريع التكوين للتأكد من أمان Spring. يتطلب أربعة ملفات. إنشاء حزمة com.w3codebox 并将这些文件放入其中。
//AppConfig.java
باقة 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
باقة com.w3codebox; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { عددًا جديدًا من الفئات [] { WebSecurityConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { // TOdo Auto-generated method stub عددًا صحيحًا []; } @Override protected String[] getServletMappings() { عددًا جديدًا من الأعداد الصحيحة [] { "/" }; } }
//SecurityWebApplicationInitializer.java
باقة com.w3codebox; استيراد org.springframework.security.web.context.*; فئة public SecurityWebApplicationInitializer توسيع AbstractSecurityWebApplicationInitializer { }
//WebSecurityConfig.java
باقة com.w3codebox; استيراد org.springframework.context.annotation.*; //استيراد org.springframework.security.config.annotation.authentication.builders.*; استيراد org.springframework.security.config.annotation.web.builders.HttpSecurity; استيراد org.springframework.security.config.annotation.web.configuration.*; استيراد org.springframework.security.core.userdetails.*; //استيراد 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.w3codebox") 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> Invalid username and password. </p> </c:if> <c:if test="${param.logout != null}"> <p> You have been logged out. </p> </c:if> <p> <label for="username">Username</label> <input type="text" id="username" name="username"/> </p> <p> <label for="password">Password</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> </form>
//index.jsp
<html> <head> <title>صفحة المنزل</title> </head> <body> <h3> Welcome to w3codebox! <br> </h3> <a href="admin">Login here</a> </body> </html>
//admin.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>صفحة المنزل</title> </head> <body> نجاح الدخول! <a href="logout">logout</a> </body> </html>
أنشئ محكم في حزمة com.w3codebox.controller.
//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/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
مشروعنا كما يلي:
الإخراج:
الآن، قدم معلومات الاعتماد الخاصة بك للدخول.
انظروا، يعمل بشكل صحيح. الآن، يمكننا إنشاء زخرفة وأفراد أكثر تخصيصًا حسب الحاجة.