English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يقدم Spring Security وظائف الدخول والخروج التي يمكن استخدامها في تطبيقنا. إن إنشاء تطبيق Spring آمن مفيد للغاية.
في هذا السياق، نحن نعمل على إنشاء تطبيق Spring MVC باستخدام Spring Security، وإنجاز وظائف الدخول والخروج.
أولاً، قمنا بإنشاء مشروع Maven، وقدمنا في ملف 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>springSecurityLoginOut</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.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.0.0.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>
منذ ذلك الحين، قمنا بإنشاء ملف التكوين لتمكين وظيفة الدخول وتتيح الوصول فقط للمستخدمين المصرحين.
المشروع يحتوي على الملفات الـJava التالية أربعة.
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() { return new Class[] { WebSecurityConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { // TOdo Auto-generated method stub return null; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
SecurityWebApplicationInitializer.java
باقة com.w3codebox; استورد org.springframework.security.web.context.*; الشُّرُكُة 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.User; استورد org.springframework.security.core.userdetails.UserDetailsService; استورد org.springframework.security.provisioning.InMemoryUserDetailsManager; استورد 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("khan").roles("ADMIN").build()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().hasRole("ADMIN") .and().formLogin().and() .httpBasic() .and() .logout() .logoutUrl("/j_spring_security_logout") .logoutSuccessUrl("/") ; } }
HomeController: مستشار الطلبات المستخدم.
باقة com.w3codebox.controller; استيراد javax.servlet.http.HttpServletRequest; استيراد javax.servlet.http.HttpServletResponse; استيراد org.springframework.security.core.Authentication; استيراد org.springframework.security.core.context.SecurityContextHolder; استيراد org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; 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="/logout", method=RequestMethod.GET) public String logoutPage(HttpServletRequest request, HttpServletResponse response) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth != null) { new SecurityContextLogoutHandler().logout(request, response, auth); } return "redirect:/"; } }
لدينا ملف JSP index.jsp ، يحتوي على التالي من الكود.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> DOCTYPE html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>الصفحة الرئيسية</title> </head> <body> <h3>Hello ${pageContext.request.userPrincipal.name}</h3> <h4>مرحبًا بكم في w3codebox!</h4> <a href="<c:url value='/logout'/>">انقر هنا للخروج</a> </body> </html>
بعد إنشاء الملفات المذكورة أعلاه، بنية مشروعنا ستكون كما يلي:
النتيجة
عند تشغيل apache tomcat، سيقوم بإنشاء النتيجة التالية للتصفح.
الآن، قدم معلومات تسجيل الدخول للمستخدم.
سيتم عرض الصفحة الرئيسية بعد تسجيل الدخول بنجاح، يرجى الرجوع إلى ما يلي.
في هذا المكان، قمنا بإنشاء رابط تسجيل الخروج، يمكن استخدامه للخروج. دعونا نتحقق منه ونخرج من التطبيق.
سيتم إعادة توجيه إلى صفحة تسجيل الدخول.
لقد أنشأنا بنجاح تطبيق Spring MVC باستخدام Spring Security لتحقيق وظائف تسجيل الدخول والخروج.