English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Framework добавил поддержку Java-настройки в Spring 3.1. В Spring Security Java-настройка была добавлена в Spring Security 3.2, что позволяет нам настраивать Spring Security Без необходимости писать строчку XML.
Здесь мы создадим пример, который реализует безопасность Spring и не использует для настройки XML. Это включает следующие шаги.
Первым шагом является создание 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 интеграция безопасных заголовков и т.д.
Теперь мы зарегистрируем его в войне 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 в нашем приложении.
Теперь загрузим 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[]{ "/" }; } }
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身份验证进行身份验证
创建一个控制器来处理用户请求。
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).