初识SpringSecurity
学习思路
- 了解SpringSecurity是什么。
- 查看官网简介。
- 简单快速阅读官方文档。
经过一段时间的学习,我们知道构建一个SpringBoot项目只需要三步:
- 导入maven依赖。
- 配置相关文件。
- 编写测试代码。
安全框架
在Web开发中,安全一直是一个十分重要的环节。它是一种非功能性的需求,但是对于一个系统十分重要,我们一般都会使用一些组件或者框架去实现。
例如防御跨站脚本攻击,用户名密码验证这些功能,安全框架集成了一些类,可以自动帮我们做这些操作。
安全框架还为我们提供了用户授权功能,不同的用户角色可以操作的功能是不一样的,例如管理员可以拥有对数据增删查改的权限,普通用户只能查看一部分数据。
市面上比较知名的安全框架:
- Shiro,用的十分多,功能十分强大。
- SpringSecurity,用的也很多,但是功能没Shiro那么强大,但是它可以和Spring无缝结合,十分方便,基本的功能全都有。
什么是SpringSecurity?
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI和AOP功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
在SpringBoot项目中集成SpringSecurity
导入maven依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
SpringSecurity的基本原理如下图所示。
简单来说,SpringSecurity基本都是通过过滤器来完成配置的身份认证、权限认证以及登出。
SpringSecurity在Servlet的过滤链(FilterChain)中注册了一个过滤器FilterChainProxy,它会把请求代理到SpringSecurity维护的多个过滤链,每个过滤链会匹配一些URL,如果匹配则执行对应的过滤器。过滤链是有顺序的,一个请求只会执行第一条匹配的过滤链。
Spring Security 的配置本质上就是新增、删除、修改过滤器。
Http配置和密码验证
Http相关的配置,主要在HttpSecurity类中,在官方文档中有详细的说明。
用户密码验证的相关方法如下图所示。
认证和授权
先来简单说说认证和授权的区别:
- 认证(authentication),是验证一个特定操作的过程,这个操作通常情况下就是“登录”,需要操作者提供一些信息,认证提供方通过这些信息判断这个操作的来源确实是真正的操作者。用三个字概括就是“你是谁?”
- 授权(authorization), 是授予某个用户、功能、节点、终端等一些特点的权限或者策略。从一个完整的权限管理系统包括操作、策略、角色、用户、用户组等。用五个字概括就是“你能干什么?”
编写代码
1、建立SpringBoot项目,导入SpringSecurity依赖。
2、导入前端资源。为了方便测试权限控制创建了三个不同等级的目录,里面分别放入了三个相同的html文件。
为了实现不同的用户拥有不同的功能,我们的首页设计如下图所示。
3、编写路由Controller。
@Controller
public class RouterController {
@RequestMapping({"/","/index"})
public String index(){
return "index";
}
@RequestMapping("/toLogin")
public String toLogin(){
return "views/login";
}
//通过restful实现复用
@RequestMapping("/level1/{id}")
pu