SpringBoot整合并使用SpringSecurity(一):初识Security

概述

SpringBoot中常见的安全框架有Shiro和Spring Security。Shiro是一种轻量级安全框架,可以独立部署运行,Spring Security,它依赖于Spring框架,是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份认证和授权。
这里提到的两点就是我们学习的内容

  • 身份认证
  • 授权

开始在SpringBoot项目中使用SpringSecurity

用第08节的项目为基础

  1. 在项目中引入SpringSecurity依赖,pom.xml增加如下内容
        
        
            org.springframework.boot
            spring-boot-starter-security
        
  1. 就这样,不做任何配置,默认启动项目
    可以看到控制台输出一个默认生成的随机密码,此时用户名也是默认的:user
    SpringBoot整合并使用SpringSecurity(一):初识Security_第1张图片
    Console

    3.访问http://localhost:8080/hello,会跳转到login界面,提需要登录,输入上述用户名和密码
    SpringBoot整合并使用SpringSecurity(一):初识Security_第2张图片
    login

    4.登录成功跳转到之前访问的地址
    SpringBoot整合并使用SpringSecurity(一):初识Security_第3张图片
    defaultSuccess
  2. 以上默认的方式,密码会随每次项目的启动而随机变化,当然不太符合使用习惯,接下来我们做一些配置
    在yml配置文件中加入spring security配置信息,如下:
spring:
  security:
    user:
      name: singleZhang
      password: 123123
  1. 按之前的步骤启动项目,输入配置信息中的用户名和密码,同样登录成功。
  2. 我们来分析一下配置信息的处理过程,进入org.springframework.boot.autoconfigure.security包,查看
    SecurityProperties.java源码
@ConfigurationProperties(
    prefix = "spring.security"
)
public class SecurityProperties {
    public static final int BASIC_AUTH_ORDER = 2147483642;
    public static final int IGNORED_ORDER = -2147483648;
    public static final int DEFAULT_FILTER_ORDER = -100;
    private final SecurityProperties.Filter filter = new SecurityProperties.Filter();
    private SecurityProperties.User user = new SecurityProperties.User();


    public static class User {
        private String name = "user";
        private String password = UUID.randomUUID().toString();
        private List roles = new ArrayList();
        private boolean passwordGenerated = true;

        public User() {
        }

        public void setName(String name) {
            this.name = name;
        }

        public void setPassword(String password) {
            if (StringUtils.hasLength(password)) {
                this.passwordGenerated = false;
                this.password = password;
            }
        }

        //..,省略无关代码

        public boolean isPasswordGenerated() {
            return this.passwordGenerated;
        }
    }

    //...省略后面代码
}

从源码中,可以看到,在读取到spring.security配置信息时候,如果设置了用户密码,那就不使用默认的user和自动生成的密码。

  1. 接下来,我们不用yml配置文件里的配置,删除掉spring.security配置信息,创建SecurityConfig.java配置类,来配置spring security
  • SecurityConfig需要继承WebSecurityConfigurerAdapter
  • 并配置BCryptPasswordEncoder密码加密方式的Bean,查看源码,可以知道BCryptPasswordEncoder类是接口PasswordEncoder的实现
  • 配置用户名和登录密码,登录密码经过BCryptPasswordEncoder加密
package com.zhlab.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
 * @ClassName SecurityConfig
 * @Description //Security配置
 * @Author singleZhang
 * @Email [email protected]
 * @Date 2020/11/4 0004 下午 4:23
 **/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //我们这里的密码经过BCryptPasswordEncoder加密,这样就能和登录框输入的密码做对比
        String pwd = encryptPassword("123123");
        auth.inMemoryAuthentication()
                .withUser("singleZhang")
                .password(pwd).roles("admin");
    }

    /**
     * 加密
     * */
    private static String encryptPassword(String password) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.encode(password);
    }

}
  1. 启动项目访问http://localhost:8080/hello,跳转到登录界面,输入用户名和密码
    SpringBoot整合并使用SpringSecurity(一):初识Security_第4张图片
    logn

    登录成功后
    SpringBoot整合并使用SpringSecurity(一):初识Security_第5张图片
    success

总结

好了,security的初步使用就先讲到这里,下一节我们需要加入自己自定义的登录界面,以及配合数据库中的用户表来进行登录校验。

项目地址

https://gitee.com/kaixinshow/springboot-note

返回【Spring Boot学习】目录

你可能感兴趣的:(SpringBoot整合并使用SpringSecurity(一):初识Security)