Spring Security02 初步应用

前言

在上一篇,我已经带大家认识了
Spring Security,,对其基本概念已有所了解,但是作为一个合格的程序员,最关键的肯定还是得动起手来,所以从本篇文章开始,我就带大家看看如何利用Spring Security来保护我们的Java Web项目。

创建SpringBoot项目

1、创建一个SpringBoot项目
2、在pom.xml中添加SpringSecurity的依赖包,在这里会完美体现SpringBoot中”约定大于配置“的思想


   
        org.springframework.boot
        spring-boot-starter-web
    

   
    
        org.springframework.boot
        spring-boot-starter-security
    

    
        org.springframework.security
        spring-security-test
        test
    

3、创建一个web接口,helloController

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {

        return "Hello, 来学习 Spring Security吧!";
    }
}

启动项目

项目启动后,在浏览器中对Web接口进行访问,会发现接口是无法直接访问的。在访问接口之前会自动跳转到"/login"地址,进入一个登陆界面。
这是因为Spring Boot"约定大于配置"的规则,只要我们添加了Spring Security的依赖包,就会自动开启安全限制,在访问Web接口之前会进行安全拦截。只有输入了用户名和密码,才能访问项目中的Web接口。


image.png

登录界面中,要求我们输入用户名和密码。这个默认的用户名是“user”,密码是一个用UUID生成的随机字符串。在每次启动项目时,都可以在控制台中看到生成的随机密码,如下图所示:


image.png

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

随机密码生成自定义

这个随机的密码到底是在哪里生成的呢?通过源码可以看到这个密码的生成策略,这个默认的用户名和密码是在SecurityProperties类中定义的,源码如下图:


image.png

而控制台上打印的密码日志,是在UserDetailsServiceAutoConfiguration类的getOrDeducePassword()方法中输出的。


image.png

从上面源码可知,默认的登录密码是利用UUID生成的随机字符串,如果用这个字符串作为登录密码太麻烦了,所以Security框架允许我们自己配置用户名和密码,并且提供了两种方式来自定义用户名和密码。
1、在配置文件中定义

2、在配置类中定义

本案例中,采用的是配置文件的方式来进行实现,在application.yml配置文件中进行如下配置

spring:
  security:
    user:
      name: yyg
      password: 123

如果在配置文件中配置了用户名和密码,项目启动后,Security会调用SecurityProperties的setPassword()方法,将密码注入到对应的属性中。


image.png

可以看到,passwordGenerated属性在这里变成了false,结合上文的源码分析,可以知道在控制台就不会再输出打印密码的信息了。

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

这样我们只需要添加一个security的依赖包,就可以实现Web安全控制了。

你可能感兴趣的:(Spring Security02 初步应用)