English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

التحقق بناءً على نموذج Spring security

التحقق بناءً على النموذج هو طريقة لتحقق هوية المستخدم من خلال نموذج الدخول. النموذج مدمج، وتقدمه إطار Spring security.

يقدم类 HttpSecurity طريقة formLogin()، التي تتحمل عرض نموذج الدخول وتحقق من معرفات المستخدم.

في هذا الدليل، سنقوم بإنشاء مثال يحقق التحقق بناءً على النموذج. لنبدأ بالمثال.

إنشاء مشروع Maven

أولاً، قم بإنشاء مشروع Maven عن طريق تقديم تفاصيل المشروع.



يبدو المشروع الأصلي هكذا:



إعداد Spring Security

باستخدام ملفات Java التالية لإعداد الأمان في التطبيق. أنشئ مكتبة 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() {  
        العودة new Class[] { WebSecurityConfig.class };  
    }  
    @Override  
    protected Class<?>[] getServletConfigClasses() {  
        // TOdo Auto-generated method stub  
        العودة null;  
    } 
    @Override  
    protected String[] getServletMappings() {  
        العودة new String[] { "/" };  
    }  
}

//SecurityWebApplicationInitializer.java

باقة com.w3codebox;  
استيراد org.springframework.security.web.context.*;  
العمومية class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {  
    }

//WebSecuiryConfig.java

باقة com.w3codebox;
استيراد org.springframework.context.annotation.*;    
استيراد org.springframework.security.config.annotation.web.builders.HttpSecurity;  
استيراد org.springframework.security.config.annotation.web.configuration.*;  
استيراد org.springframework.security.core.userdetails.*;  
استيراد org.springframework.security.provisioning.InMemoryUserDetailsManager;
استيراد 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  
  protected void configure(HttpSecurity http) throws Exception {  
      http.authorizeRequests().
      antMatchers("/index", "/user","/").permitAll()
      .antMatchers("/admin").authenticated()
      .and()
      .formLogin() // It renders a login form 
      .and()
      .logout()
      .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));     
  }  
}

المحكم

أنشئ محكمًا Controller HomeController وأضعه في com.w3codebox.controller تتضمن الباقة التالية كودًا.

//HomeController.java

الباقة com.w3codebox.controller;  
    استيراد org.springframework.stereotype.Controller;  
    استيراد 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="/admin", method=RequestMethod.GET)  
        public String admin() {  
              
            return "admin";  
        }  
    }

الوجهات

يحتوي هذا المشروع على الوجهات التالية (صفحات JSP) إثنين. ضعهم في WEB-INF/views في المجلد.

//index.jsp

<html>  
<head>    
<title>صفحة المبدأ</title>  
</head>  
<body>  
مرحبًا بك في w3codebox! <br> <br>
<a href="admin">تسجيل الدخول إدارة</a>  
</body>  
</html>

//admin.jsp

<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>صفحة البداية</title>  
</head>  
<body>  
<span style="color: green;">نجاح تسجيل الدخول!</span>
<a href="logout">خروج</a>
<hr>
    <h3>مرحبًا إدارة</h3>  
</body>  
</html>

مكونات الاعتماد للمشروع

//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>springsecurity</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>

بنية المشروع

بعد إضافة جميع هذه الملفات، بنية المشروع ستكون كما يلي:



تشغيل الخادم

عند تشغيل التطبيق على الخادم، يمكنك رؤية النتيجة التالية التي ينتجها من خلال المتصفح.

الخروج:



انقر على الرابط، سيتم عرض نموذج تسجيل الدخول، والذي سيتم استخدامه للتحقق من هوية المستخدم بناءً على النموذج.



بعد التحقق من المعرفات، سيتم التحقق من هوية المستخدم وعرضها على صفحة الإدارة.