SpringBoot integración SpringSecurity de autenticación basada en la memoria (a)

SpringBoot integración SpringSecurity de autenticación basada en la memoria (a)

En el primer tutorial, simplemente entender un uso poco SpringSecurity gestos, la adición de una dependencia en application.ymlmás algunas líneas de los archivos de configuración, se puede lograr una autenticación básica de inicio de sesión;

La configuración por defecto sólo se puede establecer una cuenta, así que si necesitas múltiples cuentas de cómo puede apoyar?

En este artículo se introducirá una autenticación basada en la memoria

Memoria Certificado I.

información almacenada autenticación de forma basada en la memoria, este post va a introducir dos gestos de uso común

0.5 Configuración del proyecto

configuración del entorno y el mismo frente, el contenido puede referirse Bowen: 191 integración 223-SpringBoot del origen de artículos SpringSecurity (cero)

1. WebSecurityConfigurerAdapter

Aquí es el principal medio SpringSecuritydel adaptador para el proceso de configuración, el siguiente es un caso sencillo

@Configuration
public class SecurityAdapterConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 测试时,可以直接用下面的方式
        //        User.UserBuilder builder = User.withDefaultPasswordEncoder();
        User.UserBuilder builder = User.builder().passwordEncoder(passwordEncoder()::encode);
        auth.inMemoryAuthentication().withUser(builder.username("hui1").password("123456").roles("guest").build());
        auth.inMemoryAuthentication().withUser(builder.username("hui2").password("123456").roles("guest").build());
    }
}

La lógica principal de configureeste método, pero tenga en cuenta que hemos creado contraseña de cifrado adicional, y cuando no fijamos en esta ocasión, cuando en realidad se inicia la sesión se encuentra que incluso si se introduce el nombre de usuario y la contraseña correctos, se pedirá fallan (Gangster bienvenida que se ha medido)

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

En segundo lugar, cuando se crea el usuario debe tener en cuenta que, además de configurar un nombre de usuario y contraseña exterior, devueltos al usuario además de una función, esto introducirá su papel en el artículo RBAC seguimiento (autoridad basada en funciones) en

2. UserDetailsService

Aquí están otra manera, cuando la información de autenticación almacenada en la parte posterior de la base de datos, se utilizará; SpringSecurity en la aplicación de la información correspondiente a la consulta del usuario a través del nombre de usuario UserDetailService frijol; sólo tenemos que poner en práctica un auto-nos la definición de frijol para reemplazar el valor por defecto, ya que se puede lograr nuestros objetivos

Nuestra clase de configuración de la siguiente manera

@Configuration
public class SecurityAutoConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    /**
     * 基于内存的认证方式
     *
     * @param passwordEncoder
     * @return
     */
    @Bean
    public UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) {
        User.UserBuilder users = User.builder().passwordEncoder(passwordEncoder::encode);
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(users.username("1hui").password("123456").roles("guest").build());
        manager.createUser(users.username("2hui").password("666666").roles("manager").build());
        manager.createUser(users.username("3hui").password("root").roles("admin").build());
        return manager;
    }
}

3. Prueba

Los dos métodos anteriores pueden conseguir información de autenticación almacenada en la memoria, entonces entramos en el enlace real, el primero en escribir una interfaz HTTP

@RestController
public class IndexRest {

    public String getUser() {
        // 获取用户信息
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        String userName;
        if (principal instanceof UserDetails) {
            userName = ((UserDetails) principal).getUsername();
        } else {
            userName = principal.toString();
        }
        return userName;
    }

    /**
     * @return
     */
    @GetMapping(path = {"/"})
    public String index() {
        return "hello this is index! welcome " + getUser();
    }
}

En la muestra de prueba real, los dos anteriores son caso bien, el siguiente proceso se basa principalmente en la presentación dada a modo de un segundo

II. Otro

0. serie de Bowen y Fuente de Proyectos

Hirofumi

fuente

1. Un Blog gris

Creen que todo el libro no es tan bueno, por encima, es puramente una de las palabras, debido a la capacidad personal limitado, es omisiones y errores inevitables, tales como encontrar un fallo, o tienen mejores sugerencias son bienvenidos críticas y generoso agradecimiento

Aquí un blog personal gris, grabación de todos los estudios y el trabajo en el blog, la bienvenida a circundar

Un blog gris

Publicados 206 artículos originales · ganado elogios 57 · vistas 160 000 +

Supongo que te gusta

Origin blog.csdn.net/liuyueyi25/article/details/103983282
Recomendado
Clasificación