SpringSecurity
简介
安全框架概述
安全框架---->解决系统安全问题的框架。没有安全框架时需要手动对每个资源访问控制。
使用安全框架后,可以通过配置的方式实现对资源的访问控制
核心功能
- 认证
- 授权
- 防止伪造身份
常用安全框架
- Spring Security:Spring家族中的一员,是一个能够基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。充分利用Spring IoC,DI(控制反转,依赖注入)和Aop(面向切面编程)
- Apache Shiro:功能强大且易于使用的安全框架
基本原理
SpringSecurity实际上就是在API上添加了一组过滤器链
- 请求进来后先经过用户名密码认证过滤器,只要用户的请求满足该过滤器的条件,即认证成功.如果不满足则放行给下一个。
- 请求继续向后,经过BasicAutenticationFilter继续进行认证,直到最后FilterSecurityInterceptor拦截器,它是API的最后一环,由它来决定请求是否能到达具体的API.
- 它会根据我们配置的一些要求,来进行判断.如果不通过则抛出异常
- 例如,某API要求请求必须经过认证,则在最后一个拦截器处,请求如果没有进行认证,则抛出对应的异常
- 再比如某API要求请求具有VIP2的权限,则最后一个拦截器会判断该请求是否具有VIP2权限
- ExceptionTranslationFilter的作用主要是捕获FilterSecurityInterceptor抛出的异常,并做响应的处理
- 绿色的部分可以通过配置来决定是否存在于过滤器链上,即由我们来决定使用哪些认证方式
基础使用
Security的默认实现
- Idea创建Springboot项目
- 编写测试Controller,直接启动访问localhost:8080/hello
package com.sy.security.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 沈洋 邮箱:1845973183@qq.com
* @create 2021/9/7-20:23
**/
@RestController
public class HelloController {
@GetMapping("/hello")
public String test(){
return "sddsds";
}
@GetMapping("/hello/test")
public String hello2(){
return "Hello world2";
}
}
- 加入security依赖再次启动localhost:8080/hello
<!--security-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
- 进入Security默认登录页面
加入Security的Starter后SpringBoot启动后默认开启
- 查看控制台输出的日志可以看到
这里输出的password就是security默认的登录密码
security默认的登录账号是:user 登录密码是启动时生成的随机字符串 - 自定义配置登录账号信息
spring:
security:
user:
password: 123456
name: admin
再次启动并访问可以发现只能登录账号是我们配置的账号
总结:security的默认实现只有一个登录用户,完全不符合我们的业务逻辑
。我们后面还需要对security认证进行自定义配置。