English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O Spring Framework no Spring 3.1Foi adicionado suporte à configuração Java no Spring Security. Na configuração do Spring Security, a configuração Java foi adicionada ao Spring Security 3.2Neste contexto, podemos configurar o Spring Security Sem a necessidade de escrever uma linha de XML.
Aqui, criaremos um exemplo que implementa a segurança do Spring e não usa configuração em XML. Isso inclui os seguintes passos.
O primeiro passo é criar a configuração Java do Spring Security. A seguir, é fornecido um exemplo de configuração Java básica.
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 configuração cria uma chamada springSecurityFilterChain do filtro Servlet. ResponsávelProteger URLs de aplicativos, verificar o nome de usuário e a senha submetidos, redirecionar para o formulário de login, etc.
A configuração Java acima executa as seguintes operações para nossa aplicação.
requisitar autenticação para cada URL criar formulário de login permitir autenticação usando autenticação baseada em formulário permitir logout prevenir ataques CSRF integração de cabeçalhos de segurança
Agora, vamos registrar no war springSecurityFilterChain Para se registrar, Spring Security oferece a classe base AbstractSecurityWebApplicationInitializer que precisamos estender.
Para aplicações Spring MVC, SecurityWebApplicationInitializer é assim.
SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
Este código registrará springSecurityFilterChain para cada URL da nossa aplicação.
Agora, carregue WebSecurityConfig para o nosso ApplicationInitializer existente e adicione ao 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-método de suporte gerado return null; } @Override protected String[] getServletMappings() { return new String[] { "/"}; } }
WebSecurityConfigurerAdapter A classe fornece um método configure(HttpSecurity http), que contém as seguintes configurações padrão. As configurações padrão são exibidas conforme a seguir.
protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); }
É semelhante ao XML fornecido.
<http <intercept-url pattern="/**" access="authenticated"/> <form-login /> <http-basic /> </http>
Este método executa as seguintes operações.
Garante que cada solicitação feita pelo usuário exija autenticação Permite que o usuário se autentique usando login baseado em formulário Permite que o usuário se autentique usando autenticação HTTP Basic
Criar um controlador para lidar com solicitações de usuários.
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"; } }
Temos uma página de vista (.jsp) index.jsp que contém o seguinte código-fonte.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Página Inicial</title> </head> <body> Bem-vindo à página inicial! </body> </html>
Nosso projeto completo está conforme mostrado abaixo.
Saída:
Temos apenas uma ação no controlador, apenas usuários reais podem acessá-la. Portanto, quando executamos o aplicativo, ele solicita que você insira as credenciais de login. A saída está abaixo.
Este é Página de login padrão fornecida pelo Spring SecurityPágina, não a criamos. Embora possamos criar nossa própria página de login e configurá-la com o aplicativo. Vamos fazer isso no próximo tópico.
Agora, forneça as credenciais de login para acessar os recursos do aplicativo. O Spring Security verifica as credenciais do usuário e garante a autenticidade do usuário.
Vamos ver o que acontece? Se digitarmos credenciais incorretas.
Depois de clicar no botão de login, será gerado Credenciais ruins (Credenciais incorretas) erro.
Agora, use Login com credenciais corretas./strong>
Essa credencial foi correspondida e a página inicial (index.jsp) foi exibida.