springboot依赖
<!--spring security--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
简介
Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分,这两点也是 Spring Security 重要核心功能。 (1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。通俗点说就是系统认为用户是否能登录 (2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。通俗点讲就是系统判断用户是否有权限去做某些事情。特点
1、和spring无缝整合
2、全面的权限控制
3、转为Web开发而设计
1)旧版本不能脱离Web环境使用
2)新版本对整个框架进行了分层抽取,分成了核心模块和 Web 模块。单独引入核心模块就可以脱离 Web 环境
4、重量级
与shiro对比shiro的特点
1、轻量级
2、通用性
1)好处:不限于Web环境,可以脱离Web环境使用
2)缺陷:在Web环境下一些特定的需求需要手动编写代码实现
spring security入门
新建springboot工程或moudle,添加web和security依赖,写一个Controller,快速测试一下,会在启动目录中看到随机生成的密码,用户名默认为user
基本原理
本质就是一个过滤链
从项目的启动日志就可以看到
来看三个过滤器的源码
FilterSecurityInterceptor:是一个方法级的权限过滤器, 基本位于过滤链的最底部可以看到就是一个过滤器
核心验证放行
super.beforeInvocation(fi) 表示查看之前的 filter 是否通过。 fi.getChain().doFilter(fi.getRequest(), fi.getResponse());表示真正的调用后台的服务。
ExceptionTranslationFilter:是个异常过滤器,用来处理在认证授权过程中抛出的异常
UsernamePasswordAuthenticationFilter :对/login 的 POST 请求做拦截,校验表单中用户名,密码。
自从有了springboot之后,对于spring security提供了自动化配置方案,可以使用较少的配置来使用spring security
两个重要的接口
UserDetailsService 接口
查询数据库用户名和密码的过程
1、创建类继承UserNamePasswordAuthenticationFilter,重写是三个方法
2、创建类实现UserDetailsService 接口,编写查询过程,返回User对象,这个User对象是框架自带的
PasswordEncoder接口
用于返回User中密码的加密
Web权限方案
用户认证
1、设置登录的用户名和密码
1)通过配置文件
2)通过配置类
3)自定义编写实现类