Springboot +spring security,创建SpringSecurity项目

一.简介

搭建第一个Spring Security项目,看看如何利用Spring Security来保护Java Web项目。

二. 创建SpringSecurity项目

我们这边使用idea进行创建。

2.1创建一个基于Maven的Project项目。

在这里插入图片描述

2.2设置项目名称和存储位置

Springboot +spring security,创建SpringSecurity项目_第1张图片
Springboot +spring security,创建SpringSecurity项目_第2张图片

2.3添加项目依赖

在pom.xml文件中,配置依赖,代码如下:


    1.8
    1.8
    1.8
    UTF-8
    UTF-8
    2.2.5.RELEASE
    Cairo-SR3

 

    
        
            org.springframework.boot
            spring-boot-dependencies
            ${spring-boot.version}
            pom
            import
        
 
        
            
             
             io.spring.platform
             platform-bom
             ${spring-platform.version}
             pom
             import
        
    

 

   
        org.springframework.boot
        spring-boot-starter-web
    
 
   
    
        org.springframework.boot
        spring-boot-starter-security
    
 
    
        org.springframework.security
        spring-security-test
        test
    
    
            org.springframework.boot
            spring-boot-starter-test
            test
      
   
 
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
 
    
    
        
            aliyun-repos
            https://maven.aliyun.com/repository/public
            
                false
            
        

三.代码实现

3.1创建项目入口类

启动类代码如下:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class Demo01Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Demo01Application.class, args);
    }
 
}

3.2创建web接口

HelloController类的代码如下:


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
 
    @GetMapping("/hello")
    public String hello() {
        return "德玛西亚";
    }
 
}

四.功能验证

4.1启动项目

我们把项目启动起来后,在浏览器中对Web接口进行访问,会发现接口是无法直接访问的。在访问接口之前会自动跳转到"/login"地址,进入到一个登录界面。这是因为Spring Boot中"约定大约配置"的规则,只要我们添加了Spring Security的依赖包,就会自动开启安全限制,在访问Web接口之前会进行安全拦截。只有输入了用户名和密码,才能访问项目中的Web接口。
Springboot +spring security,创建SpringSecurity项目_第3张图片
此时登录界面中,要求我们输入用户名和密码。这个默认的用户名是“user”,密码是一个用UUID生成的随机字符串。在每次启动项目时,都可以在控制台中看到生成的随机密码,截图如下:
Springboot +spring security,创建SpringSecurity项目_第4张图片

4.2随机密码生成机制

这个随机的密码到底是在哪里生成的呢?这个默认的用户名和密码其实是在SecurityProperties类中定义的,截图如下:
Springboot +spring security,创建SpringSecurity项目_第5张图片
而控制台上打印的密码日志,是在UserDetailsServiceAutoConfiguration类的getOrDeducePassword()方法中输出的

只要把这个随机密码,复制粘贴到登录页面的密码框中,就可以访问"/hello"接口了。

4.3配置Security账户

从上面的源码分析可知,默认的登录密码是利用UUID生成的随机字符串,如果使用这个字符串作为登录密码,就比较麻烦。所以Security框架允许我们自己配置用户名和密码,并且提供了2种方式来进行自定义用户名和密码:

  1. 在配置文件中定义
  2. 在配置类中定义
4.3.1在配置文件中定义

这篇文章中我们先采用配置文件的方式来进行实现,首先创建一个application.yml配置文件,配置如下:

spring:
  security:
    user:
      name: demaxiya
      password: 123
4.3.2setPassword()源码分析

在这里配置了自定义的用户名和密码后,在Spring Security的源码中,会通过调用SecurityProperties的 set()方法 注入到对应的属性中。SecurityProperties.User#setPassword() 方法的源码截图如下:
Springboot +spring security,创建SpringSecurity项目_第6张图片

4.4重启项目

重启项目,这时候利用我们自己配置的用户名和密码,就可以访问"/hello"接口了。

你可能感兴趣的:(SpringBoot,spring,security,Java开发,spring,spring,boot,java)