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

Projeto de configuração do Spring Security

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.

Passo1

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

Passo2

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.

Passo3

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[] { "/"};
    }
}

Passo4

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

Número5Passo

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.