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

Проект конфигурации Spring security

Spring Framework добавил поддержку Java-настройки в Spring 3.1. В Spring Security Java-настройка была добавлена в Spring Security 3.2, что позволяет нам настраивать Spring Security Без необходимости писать строчку XML.

Здесь мы создадим пример, который реализует безопасность Spring и не использует для настройки XML. Это включает следующие шаги.

Шаг 1

Первым шагом является создание Java-настройки Spring Security. Ниже приведена простая базовая Java-настройка.

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-настройка выполняет следующие действия для нашего приложения.

требование аутентификации для каждого URL создание формы входа возможность аутентификации пользователей с использованием форменной аутентификации возможность выхода из системы предотвращение атак CSRF интеграция безопасных заголовков и т.д.

Шаг 2

Теперь мы зарегистрируем его в войне springSecurityFilterChain Для регистрации Spring Security предоставляет базовый класс AbstractSecurityWebApplicationInitializer, который нужно расширить.

Для Spring MVC приложения SecurityWebApplicationInitializer выглядит следующим образом.

SecurityWebApplicationInitializer.java

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

Этот код зарегистрирует springSecurityFilterChain для каждого URL в нашем приложении.

Шаг 3

Теперь загрузим WebSecurityConfig в нашу существующую ApplicationInitializer и добавим его в метод getRootConfigClasses().

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 SecurityСтраница, которую мы не создали.虽然说 мы можем создать свою страницу входа и настроить приложение для использования. Мы сделаем это в следующей теме.

Теперь предоставьте данные для входа, чтобы получить доступ к ресурсам приложения. Spring Security проверяет данные для входа и гарантирует подлинность пользователя.

Давайте посмотрим, что произойдет? Если мы введем неправильные данные.

После нажатия кнопки входа будет вызван Неправильные данные (Ошибка данных) ошибка.

Теперь, используя Правильные данные для входа. /strong>

Этот пароль соответствует и показывает домашнюю страницу (index.jsp).