• Spring Security学习(一)——快速开始


    前言

    Spring Security是目前Java后台管理系统中使用最常见的安全认证框架之一。它的上手没Shiro那么直观。Shiro是可以直接开个javaSE应用验证的,但Spring Security基本要求和web关联起来。刚开始看甚至不知道从何入手。最近决定静下心来好好学习一下Spring Security的使用。

    快速开始

    Spring Security不像Shiro那样需要众多配置。它有很多默认的设置,甚至连默认登录页都替使用者准备了。作为快速开始,我们先看看Spring Security的默认效果,再逐步把默认的设置改为自定义方式。

    新建项目

    新建一个maven项目,pom如下。

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <groupId>com.sadoshi.springsecuritygroupId>
    5. <artifactId>test1artifactId>
    6. <version>0.0.1-SNAPSHOTversion>
    7. <parent>
    8. <groupId>org.springframework.bootgroupId>
    9. <artifactId>spring-boot-starter-parentartifactId>
    10. <version>2.7.18version>
    11. <relativePath />
    12. parent>
    13. <properties>
    14. <java.version>1.8java.version>
    15. properties>
    16. <dependencies>
    17. <dependency>
    18. <groupId>org.springframework.bootgroupId>
    19. <artifactId>spring-boot-starter-webartifactId>
    20. dependency>
    21. <dependency>
    22. <groupId>org.springframework.bootgroupId>
    23. <artifactId>spring-boot-starter-securityartifactId>
    24. dependency>
    25. dependencies>
    26. <build>
    27. <plugins>
    28. <plugin>
    29. <groupId>org.springframework.bootgroupId>
    30. <artifactId>spring-boot-maven-pluginartifactId>
    31. plugin>
    32. plugins>
    33. build>
    34. project>

    新建启动类App

    1. package com.sadoshi.springsecurity;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. @SpringBootApplication
    5. public class App {
    6. public static void main(String[] args) {
    7. SpringApplication.run(App.class, args);
    8. }
    9. }

    新建控制类HelloController

    1. package com.sadoshi.springsecurity.controller;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. @RestController
    5. public class HelloController {
    6. @RequestMapping("/hello")
    7. public String hello() {
    8. return "hello";
    9. }
    10. }

    接着我们启动App类,然后在浏览器地址栏输入:http://localhost:8080/hello。然后你会发现浏览器重定向到 http://localhost:8080/login

    上面这个就是Spring Security的默认登录页。它拦截了用户的访问请求,重定向到默认登录页。接着我们要登录,默认的用户名是user,密码则是启动时随机生成,看下程序启动时的控制台输出:

     红色框框的就是密码。我们输入帐号名和密码,就能打开/hello的页面.

    增加配置文件

    目前我们的项目还没有配置文件,为了方便后续一些配置,我们在resource目录下添加application.yml配置文件:

    1. server:
    2. port: 8082

    我们把端口设置为8082。

    Spring Security的架构

    Spring Security使用过滤器完成拦截操作。贴张官网的图:

    可以看到从客户访问系统,经过过滤器链。而Spring Security则是其中的一串SecurityFilterChain。我们可以通过源码断点调试看下Spring Security都添加了哪些过滤器:

     通过断点可以看到Spring Security添加了15个过滤器。从名字看第五个的UsernamePasswordAuthenticationFilter应该就是校验用户名密码的过滤器。学习Spring Security也是围绕着这些过滤器学习

    小结

    本文我们发现引入Spring Security使用非常快捷,Spring Security有很多默认配置的东西,包括默认登录界面,默认用户名密码。这也让我们有很多疑问,比如如何替换默认登录页,如何设置让其读取数据库里保存的用户名密码,如何设置让Spring Security只拦截部分页面等。这些都会在后面的文章中学习。

  • 相关阅读:
    Go 围炉札记
    MySQL的零拷贝技术
    SpringBoot教程(十三) SpringBoot集成MybatisPlus
    删除一个数组中和另一个数组中行元素相等的行
    腾讯二面:为什么不建议在 Docker 中跑 MySQL?
    迪文TPS04电容触摸屏驱动IC溅水触摸测试成功
    用DIV+CSS技术设计的抗击疫情网页与实现制作(web前端网页制作课作业)
    15.Composition API(一)
    【BP时序预测】基于鱼鹰算法OOA优化BP神经网络实现温度数据预测算法研究附matlab代码
    软考网络工程师每日一练10.20
  • 原文地址:https://blog.csdn.net/sadoshi/article/details/126822896