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

مشروع تكوين Spring security

أضافت دعم تكوين Java إلى Spring Framework في إصدار Spring 3.1. في Spring Security، تم إضافة تكوين Java إلى Spring Security 3.2، مما يتيح لنا تكوين Spring Security بدون كتابة سطر XML.

في هذا المكان، سنقوم بإنشاء مثال يحقق الأمان في Spring دون استخدام تكوين XML. ويشمل ما يلي من الخطوات.

الخطوة 1

الخطوة الأولى هي إنشاء تكوين Java لـ Spring Security. يقدم لنا ما يلي تكوينًا بسيطًا وجافا.

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.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@EnableWebSecurity
@ComponentScan("com.w3codebox")
public class WebSecurityConfig implements WebMvcConfigurer {
    
    @Bean
    public UserDetailsService userDetailsService() throws Exception {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withDefaultPasswordEncoder().username("w3codebox").
        password("java123").roles("USER").build());
        return manager;
    }
    
    protected void configure(HttpSecurity http) throws Exception {
                
        http
        .antMatcher("/")                               
        .authorizeRequests();
            .anyRequest().hasRole("ADMIN")
            .and();
        .httpBasic();
    }
}

تنتج هذه الإعدادات إعدادًا يُدعى springSecurityFilterChain متصفح Servlet. مسؤولحماية عنوان URL للتطبيق، التحقق من اسم المستخدم وكلمة المرور المقدمة، وتوجيه المستخدم إلى نموذج تسجيل الدخول، وما إلى ذلك.

تستخدم هذه الإعدادات Java للقيام بما يلي لبرنامجنا.

الطلب لـ authentication لكل URL إنشاء نموذج تسجيل الدخول السماح للمستخدمين باستخدام التحقق بناءً على نموذج الصفحة السماح بال登出示 منع هجمات CSRF تداخل العناوين الأمنية

الخطوة 2

الآن، سنقوم بـ registration إلى الحرب springSecurityFilterChain للـ registration، يقدم Spring Security AbstractSecurityWebApplicationInitializer الأساس للتمديد.

للتطبيقات Spring MVC، يبدو SecurityWebApplicationInitializer كالتالي.

SecurityWebApplicationInitializer.java

package com.w3codebox;
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
    extends AbstractSecurityWebApplicationInitializer {
}

سيقوم هذا الكود ب-registration لـ springSecurityFilterChain لكل URL في تطبيقنا.

الخطوة 3

الآن، قم بتحميل WebSecurityConfig إلى ApplicationInitializer الحالية لدينا وأضفها إلى getRootConfigClasses() method.

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-generated method stub
        return null;
    }
    @Override
    protected String[] getServletMappings() {
        return new String[]{ "/" };
    }
}

步骤4

WebSecurityConfigurerAdapter 类提供了一个configure(HttpSecurity http)方法,该方法包含以下默认配置。默认定义如下所示。

protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests();
.anyRequest().authenticated();
.and();
.formLogin();
.and();
.httpBasic();
}

它类似于给定的XML。

<http>
<intercept-url pattern="/**" access="authenticated"/>
<form-login />
<http-basic />
</http>

此方法执行以下操作。

它确保用户提出的每个请求都要求对用户进行身份验证 它允许用户使用基于表单的登录进行身份验证 它允许用户使用HTTP Basic身份验证进行身份验证

第5步

创建一个控制器来处理用户请求。

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";
    }
}

لدينا صفحة عرض (.jsp) index.jsp ، يحتوي على ما يلي من الكود المصدر.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>صفحة المنزل</title>
</head>
<body>
مرحبًا بك في الصفحة الرئيسية!
</body>
</html>

مشروعنا الكامل كما يلي.

الناتج:

لدينا فعل واحد فقط في التحكم، يمكن الوصول إليه فقط من قبل المستخدمين الحقيقيين. لذلك، عند تشغيل التطبيق، سيطلب منك إدخال معرفات الولوج. يتم عرض الناتج أدناه.

هذا صفحة الولوج الافتراضية التي يقدمها أمان Springالصفحة، لم ننشئها. على الرغم من أننا يمكننا إنشاء صفحة الولوج الخاصة بنا واستخدام التطبيق لإعدادها. سنقوم بذلك في الموضوع التالي.

الآن، قدم معرفات الولوج للدخول إلى موارد التطبيق. يتحقق أمان Spring من صحة معرفات المستخدم ويعزز حقيقية المستخدم.

دعونا نرى ما سيحدث؟ إذا كنا قد أدخنا معرفات خاطئة.

بعد الضغط على زر الولوج، سيتم معرفات سيئة (معرفات خاطئة) خطأ.

الآن، استخدم تم تسجيل الدخول بنجاح.<strong>

هذه المعرفات قد تم مطابقتها وعرض الصفحة الرئيسية (index.jsp).