English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il framework Spring ha aggiunto il supporto alla configurazione Java nella versione 3.1 di Spring. In Spring Security, la configurazione Java è stata aggiunta nella versione 3.2 di Spring Security, il che ci permette di configurare Spring Security Senza scrivere una singola riga di XML.
In questo articolo, creeremo un esempio di implementazione di Spring che implementa la sicurezza senza configurazione XML. Include i seguenti passaggi.
Il primo passo è creare la configurazione Java di Spring Security. Di seguito è fornita una configurazione Java di base semplice.
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(); } }
Questa configurazione crea un oggetto chiamato springSecurityFilterChain del filtro Servlet. ResponsabileProteggere l'URL dell'applicazione, verificare il nome utente e la password inviati, reindirizzare al modulo di accesso, ecc.
La configurazione Java menzionata sopra esegue le seguenti operazioni per la nostra applicazione.
richiesta di autenticazione per ogni URL creazione del modulo di accesso permesso di autenticazione tramite autenticazione basata su modulo permesso di disconnessione prevenzione degli attacchi CSRF integrazione dei titoli di sicurezza
Ora, registriamo nel nostro war springSecurityFilterChain Per effettuare la registrazione, Spring Security fornisce la classe di base da estendere, AbstractSecurityWebApplicationInitializer.
Per l'applicazione Spring MVC, SecurityWebApplicationInitializer è così.
SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
Questo codice registrerà springSecurityFilterChain per ogni URL della nostra applicazione.
Ora, carica WebSecurityConfig nel nostro ApplicationInitializer esistente e aggiungilo al metodo 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 \ } }
我们有一个视图(.jsp)页面 index.jsp ,其中包含以下源代码。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>主页</title> </head> <body> 欢迎使用主页! </body> </html>
我们的完整项目如下所示。
输出:
我们在控制器中只有一个动作,只有真正的用户才能访问它。因此,当我们运行该应用程序时,它会提示您输入登录凭据。输出如下。
这是 SpringSecurity提供的默认登录页面页面,我们没有创建它。尽管我们可以创建自己的登录页面并使用应用程序进行配置。我们将在下一个主题中进行此操作。
现在,提供登录凭据以进入应用程序资源。SpringSecurity验证用户凭据并确保用户真实性。
让我们看看会发生什么?如果我们输入了错误的凭据。
单击登录按钮后,则会触发 错误的凭据 (错误凭据)错误。
现在,使用 凭据正确登录。
这次凭据匹配并显示了主页(index.jsp)。