English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Framework en Spring 3.1Se ha agregado soporte de configuración Java. En Spring Security, la configuración Java se ha agregado a Spring Security 3.2En la que podemos configurar Spring Security Sin necesidad de escribir una línea de XML.
Aquí, crearemos un ejemplo que implementa Spring, la seguridad y no utiliza la configuración XML. Incluye los siguientes pasos.
El primer paso es crear la configuración Java de Spring Security. A continuación, se proporciona una configuración básica de Java simple.
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(); } }
Esta configuración crea una llamada springSecurityFilterChain del filtro de Servlet. ResponsableProtección de la URL de la aplicación, verificación del nombre de usuario y contraseña presentados, redirección al formulario de inicio de sesión, etc.
La configuración Java anterior realiza lo siguiente para nuestra aplicación.
requerir autenticación para cada URL crear un formulario de inicio de sesión permitir que los usuarios se autentiquen utilizando autenticación basada en formulario permitir el cierre de sesión prevenir ataques CSRF integración de títulos de seguridad, etc.
Ahora, registraremos en la guerra springSecurityFilterChain . Para registrarse, Spring Security proporciona la clase base que debemos extender, AbstractSecurityWebApplicationInitializer.
Para una aplicación Spring MVC, SecurityWebApplicationInitializer se ve así.
SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
Este código registrará springSecurityFilterChain para cada URL de nuestra aplicación.
Ahora, cargue WebSecurityConfig a nuestra ApplicationInitializer actual y agréguelo al método 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"; } }
Tenemos una página de vista (.jsp) index.jsp que contiene el siguiente código fuente.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Página de inicio</title> </head> <body> ¡Bienvenido a la página de inicio! </body> </html>
Nuestro proyecto completo se muestra a continuación.
Salida:
Tenemos solo una acción en el controlador, solo los usuarios reales pueden acceder a ella. Por lo tanto, cuando ejecutamos la aplicación, nos solicita ingresar las credenciales de inicio de sesión. La salida se muestra a continuación.
Esto es Página de inicio de sesión predeterminada proporcionada por Spring SecurityPágina, no la creamos. A pesar de que podemos crear nuestra propia página de inicio de sesión y configurarla con la aplicación. Lo haremos en el siguiente tema.
Ahora, proporcione las credenciales de inicio de sesión para ingresar a los recursos de la aplicación. Spring Security verifica las credenciales del usuario y asegura la autenticidad del usuario.
Vamos a ver qué sucede. Si ingresamos credenciales incorrectas.
Después de hacer clic en el botón de inicio de sesión, se desencadena Credenciales malas (Credenciales incorrectas) error.
Ahora, use Inicio de sesión con credenciales correctas./strong>
Esta credencial se coincide y se muestra la página principal (index.jsp).