Conceptos básicos de seguridad de Spring: inicio rápido para implementar la interceptación de sesiones de autenticación

Spirng-Security Foundation: autenticación de sesión basada en SpringMVC
modificada en función de la autenticación mvc

Introducción

Spring Security es un marco de seguridad que puede proporcionar soluciones de control de acceso de seguridad declarativa para sistemas de aplicaciones empresariales basados ​​en Spring. Debido a que es miembro del ecosistema Spring, se revisa y actualiza constantemente junto con todo el ecosistema Spring. Es muy simple agregar Spring Security al proyecto Spring Boot. El uso de Spring Security reduce la necesidad de escribir una gran cantidad de código repetitivo. para el control de seguridad del sistema empresarial.

crear proyecto

Proyecto Maven vacío, la siguiente es la estructura del proyecto que se ha construido
inserte la descripción de la imagen aquí
Primero configure la configuración de spring y springmvc

@Configuration
@ComponentScan(basePackages = "com.mcs.security",
         excludeFilters = {
    
    @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)})
public class ApplicationConfig {
    
    
}
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.mcs.security",
                        includeFilters = {
    
    @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)})
public class WebConfig implements WebMvcConfigurer {
    
    

    // 配置视图解析器

    public InternalResourceViewResolver viewResolver() {
    
    
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        internalResourceViewResolver.setPrefix("/WEB-INF/views/");
        internalResourceViewResolver.setSuffix(".jsp");
        return internalResourceViewResolver;
    }


    // 默认url根路径跳转到/login,此url为spring security提供
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        registry.addViewController("/").setViewName("redirect:/login");
    }
}
public class SpringApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
    
    @Override
    protected Class<?>[] getRootConfigClasses() {
    
    
        return new Class[] {
    
     ApplicationConfig.class, WebSecurityConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
    
    
        return new Class[] {
    
     WebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
    
    
        return new String[] {
    
     "/" };
    }
}

Importe las siguientes coordenadas sobre la base de la última configuración de springMVC.
La versión debe ser 5.1.4, de lo contrario, se informará un error en la página de inicio de sesión exitosa.

<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>5.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>5.1.4.RELEASE</version>
        </dependency>

Inicializar seguridad

public class SpringSecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    
    
    public SpringSecurityApplicationInitializer() {
    
    
        // 如果没有使用spring再加上这个
        //super(WebSecurityConfig.class);
    }
}

Configurar seguridad


@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
    
    // 配置用户信息服务
    @Bean
    public UserDetailsService userDetailsService() {
    
    
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withUsername("zhangsan").password("123").authorities("p1").build());
        manager.createUser(User.withUsername("lisi").password("123").authorities("p2").build());
        return manager;
    }
    // 密码编码器
    @Bean
    public PasswordEncoder passwordEncoder() {
    
    
        return NoOpPasswordEncoder.getInstance();
    }

    // 配置安全拦截机制
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    
    
        http.authorizeRequests()
                .antMatchers("/r/r1").hasAuthority("p1")
                .antMatchers("/r/r2").hasAuthority("p2")
                .antMatchers("/r/**").authenticated() // 拦截/r/**请求
                .anyRequest().permitAll() // 其他请求正常方行
                .and()
                .formLogin().successForwardUrl("/login-success");
    }
}

configuración del controlador

@RestController
public class loginController {
    
    

    @RequestMapping(value = "/login-success", produces = {
    
    "text/plain;charset=utf-8"})
    public String loginSuccess() {
    
    
        return "登录成功";
    }

    @RequestMapping(value = "/r/r1", produces = {
    
    "text/plain;charset=utf-8"})
    public String r1() {
    
    
        return "访问资源r1";
    }

    @RequestMapping(value = "/r/r2", produces = {
    
    "text/plain;charset=utf-8"})
    public String r2() {
    
    
        return "访问资源r2";
    }
}

Resumir

Entonces, sobre la base de nuestro uso original de springmvc, eliminamos nuestra página de inicio de sesión personalizada y usamos la interfaz de inicio de sesión y éxito que viene con spring security, y cambiamos el procesamiento del interceptor original usando springmvc para usar seguridad para procesar la sesión de autorización, simplificando el código miles de millones poco.

Supongo que te gusta

Origin blog.csdn.net/qq_44660367/article/details/109517211
Recomendado
Clasificación