Inicio rápido de SpringBoot+SpringSecurity

Tabla de contenido

Introducción

Inicio rápido

2. Inicio rápido basado en el módulo de administrador SpringSecurity

2.0 Primero introduce las dependencias

2.1 Heredar WebSecurityConfiuraerAdapter

2.2 Página de inicio

3. Inicio rápido basado en el módulo de usuario común SpringSecurity

3.0. Introduciendo dependencias

 3.1 Implementar la interfaz UserDetailsService

3.2 Heredar WebSecurityconfiguraerAdapter

3.3 Página de inicio


Introducción

SpringSecurity está integrado en SpringBoot 2.3.4.RELEASE, por lo que solo necesitamos introducir dependencias de inicio.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
Spring es un marco de desarrollo de aplicaciones Java muy popular y exitoso, y Spring Security es miembro de la familia Spring.
miembro. Spring Security se basa en el marco Spring y proporciona una solución completa para la seguridad de aplicaciones web.
caso.
Como probablemente sepa, las dos áreas principales relacionadas con la seguridad son la " autenticación " y la " autorización " (o control de acceso).
control), en términos generales, la seguridad de las aplicaciones web incluye la autenticación del usuario (Autenticación) y la autorización del usuario.
(Autorización) dos partes, estos dos puntos también son funciones centrales importantes de Spring Security.
(1) La autenticación de usuario se refiere a: verificar si un usuario es un sujeto legal en el sistema, es decir, si el usuario puede acceder
el sistema. La autenticación de usuarios generalmente requiere que los usuarios proporcionen nombres de usuario y contraseñas. El sistema completa la autenticación verificando el nombre de usuario y la contraseña.
proceso de certificación. En términos sencillos, el sistema piensa si el usuario puede iniciar sesión.
(2) La autorización del usuario se refiere a verificar si un usuario tiene la autoridad para realizar una operación. En un sistema, diferentes usuarios
Los permisos que tienen son diferentes. Por ejemplo, para un archivo, algunos usuarios sólo pueden leerlo, mientras que otros pueden
Modificar. En términos generales, el sistema asigna diferentes roles a diferentes usuarios, y cada rol corresponde a una serie de
permisos. En términos sencillos, el sistema determina si el usuario tiene permiso para hacer determinadas cosas.

Inicio rápido

El inicio rápido del uso de SpringSecurity se divide en dos pasos, porque en el proceso de redacción de proyectos en la empresa, se divide en front-end y back-end. Cuando se utiliza el inicio de sesión en el back-end, no es necesario realizar consultas. la base de datos, porque el inicio de sesión de back-end está controlado por el administrador y la administración Solo se necesitan de 1 a 5 miembros. Necesitamos consultar la base de datos en la recepción, por lo que dividiré el inicio rápido en dos módulos, uno es el módulo de fondo y el otro es el módulo de recepción.

2. Inicio rápido basado en el módulo de administrador SpringSecurity

2.0 Primero introduce las dependencias

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2.1 Heredar WebSecurityConfiuraerAdapter

WebSecurityConfigurerAdaptador
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
                
        String password = passwordEncoder().encode("密码");
        auth.inMemoryAuthentication().withUser("账号").password(password).roles("");
    }
    //引入security自带的密码加密
    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //配置认证
        http.formLogin().loginPage("/login.html")//配置那个url为登录页面

        .loginProcessingUrl("/login")//设置那个是登录的url
        .defaultSuccessUrl("/admin/index.html").permitAll()//登录成功去哪?
                .failureForwardUrl("/find.html").permitAll()//登录失败去哪?

//退出时删除缓存,并且重定向到login.html页面   在前端默认路径为:/logout      .and().requestCache().disable().logout().logoutSuccessUrl("/login.html").permitAll();
        //开启frame功能
        http.headers().frameOptions().sameOrigin();
            //这个可以根据自己需求去添加
        http.authorizeRequests().antMatchers(
                "/css/**",
                "/*.html", 
                "/img/**",
                "/js/**",
                "/login",
                "/plugins/**"
                ).permitAll()//制定URL无需保护。
                .anyRequest() //其他请求
                .authenticated();//需要认证


        //关闭csrf跨域
        http.csrf().disable();
    }
}

2.2 Página de inicio

<form action="/login"method="post">
用户名:<input type="text"name="username"/><br/>
密码:<input type="password"name="password"/><br/>
<input type="submit"value="提交"/>
</form>

Nota: se debe llamar al nombre: el método de nombre de usuario y contraseña      debe enviarse para la acción posterior : /login

 Una vez completada la configuración, puede iniciar el proyecto y comenzar a probar. No importa a qué acceda, la página de inicio de sesión que especificó será predeterminada. ¡Solo después de iniciar sesión exitosamente podrá acceder a otras páginas!

3. Inicio rápido basado en el módulo de usuario común SpringSecurity

3.0. Introduciendo dependencias

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

 3.1 Implementar la interfaz UserDetailsService

@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {
    /**
因为公司项目使用的是Dubbo+zookeeper组合,所以我调用的接口在zookeeper中使用这个注解
如果你使用的是单项目的话可以直接通过spring注入的方式,来获取你的mapper接口!
    
*/
    @Reference(version = "1.0.0")
    SellerService sellerService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        //给当前用户创建权限 可自定义 默认就为这个
        List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_SELLER");
                //通过前端传入的参数获取username,在数据库中查询出来数据
        Seller seller = sellerService.findOne(username);
        //这个是判断用户的状态,如果没有状态,你只需要判断是否为空即可
        if (seller!=null && "1".equals(seller.getStatus())){
            
            return new User(seller.getSellerId(),new BCryptPasswordEncoder().encode(seller.getPassword()),auths);
        }else {
           throw new  UsernameNotFoundException("用户名不存在");
        }

    }


}

3.2 Heredar WebSecurityconfiguraerAdapter

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //通过数据库查询出来判断账号密码是否相等
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());

    }
    //注入security自带的加密方式
    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        //配置认证
        http.formLogin().loginPage("/shoplogin.html")//配置那个url为登录页面

                .loginProcessingUrl("/login")//设置那个是登录的url
                .defaultSuccessUrl("/admin/index.html").permitAll()//登录成功去哪?
                .failureForwardUrl("/shoplogin.html").permitAll()//登录失败去哪?
                .and().requestCache().disable().logout().logoutSuccessUrl("/login.html").permitAll();
        
        //  解析前端的 <frame>、<iframe> 标签
        http.headers().frameOptions().sameOrigin();
        //设置无需保护的路径
        http.authorizeRequests().antMatchers(
                "/css/**",
                            "/img/**",
                            "/js/**",
                            "/login",
                            "/plugins/**",
                            "/seller/addSeller",
                             "/*.html"
        ).permitAll()//制定URL无需保护。

                .anyRequest() //其他请求
                .authenticated();//需要认证



        //关闭跨域
        http.csrf().disable();
    }
}

Esta imagen es el contenido del código anterior y puede ignorarse. 

3.3 Página de inicio

<form action="/login"method="post">
用户名:<input type="text"name="username"/><br/>
密码:<input type="password"name="password"/><br/>
<input type="submit"value="提交"/>
</form>

 3.4 Obtener el nombre de usuario gestionado por Seguridad

 @RequestMapping("/name")
    public Map<String,String> name(){
            //获取被Security管理的username
        String name= SecurityContextHolder.getContext().getAuthentication().getName();
        
        //将他保存到map等其他类型中就可以传到前端页面或者通过这个名字查询数据库
        Map<String, String> map = new HashMap<>();
        map.put("loginName",name);
        return map;
    }

Listo para la prueba 

Cadena de solicitudes:

        Cuando iniciamos el proyecto,  el método configure(HttpSecurity http) en 3.2 se cargará automáticamente. Luego, cuando ingresemos a la página de inicio de sesión y enviemos los datos de la solicitud de publicación a /login mediante el nombre de usuario y la contraseña, ingresaremos loadUserByUsername (String nombre de usuario) método en 3.1 . Para juzgar entre sus bases de datos, una vez completado el juicio, ingresará el método configure(AuthenticationManagerBuilder auth) en 3.2 y dejará que Seguridad se encargue de si el inicio de sesión es exitoso.

Supongo que te gusta

Origin blog.csdn.net/wang20000102/article/details/132425212
Recomendado
Clasificación