Spring Security学习——快速开始

Posted sadoshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Security学习——快速开始相关的知识,希望对你有一定的参考价值。

前言

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

快速开始

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

新建项目

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.sadoshi.springsecurity</groupId>
	<artifactId>test1</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.6.8</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

新建启动类App

package com.sadoshi.springsecurity;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App 

	public static void main(String[] args) 
		SpringApplication.run(App.class, args);
	


新建控制类HelloController

package com.sadoshi.springsecurity.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController 

	@RequestMapping("/hello")
	public String hello() 
		return "hello";
	

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

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

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

增加配置文件

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

server:
  port: 8082

我们把端口设置为8082。

Spring Security的架构

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

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

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

小结

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

以上是关于Spring Security学习——快速开始的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security学习——快速开始

认证和授权学习2:springboot中快速使用spring security

SpringBoot学习—— springboot快速整合使用spring security组

Spring Security LDAP简介

Spring Security + JWT学习

Grails Spring Security Core无法登录