Spring Security
Web应用的安全性包括 用户认证(Authentication) 和 用户授权(Authorization) 两个部分,这两点也是SpringSecurity重要核心功能。
通俗点说:
- 用户认证就是系统认为用户是否登录
- 用户授权就是系统判断用户是否有权限去做某些事
SpringSecurity特点
- 和Spring无缝整合
- 全面的权限控制
- 专门为Web开发而设计
- 重量级
Shiro特点
- 轻量级
- 好处:不局限于Web环境,可以脱离Web环境使用
- 缺陷:Web环境下一些特定的需求需要手动编写代码定制
简单入门:
账号:user
密码:会随机生成
Spring Security入门原理
本质是一个过滤链,有很多过滤器
- FilterSecurityInterceptor:是一个 方法级的权限过滤器,基本位于过滤链的最底部
- ExceptionTranslationFilter:是一个异常过滤器,用于处理在认证授权过程中抛出的异常
- UsernamePasswordAuthenticationFilter:对/login的Post请求做拦截,校验表单中用户名,密码
- 等等。。。
过滤器如何进行加载的
使用SpringSecurity配置过滤器 DelegatingFilterProxy
FilterChainProxy
两个重要的接口:
UserDetailsService:
查询数据库用户名和密码过程
- 创建类继承UsernamePasswordAuthenticationFilter:重写三个方法
- 创建类实现UserDetailService,编写查询数据库过程,返回User对象,这个User对象是安全框架提供的对象
PasswordEncoder:
数据加密的接口,用于返回User对象里密码加密
实践
设置登录的用户名和密码
- 通过配置文件
- 通过配置类
- 自定义编写实现类
第一种方式:通过配置文件
第二种方式:通过配置类
第三种方式:自定义编写实现类
- 创建一个配置类,设置是用哪个userDetailService实现类
- 编写实现类,返回User对象,User对象有用户名密码和操作权限
完成查询数据库登录
整合MybatisPlus
- 引入相关依赖
- 创建数据库表
- 创建对应实体类
- 整合mp,创建接口,继承mp的接口
@Service("userDetailsService")
public class MyUserDetailService implements UserDetailsService {
@Autowired
private UsersMapper usersMapper;
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
//根据用户名查询
QueryWrapper<Users> wrapper=new QueryWrapper<>();
//where username=?
wrapper.eq("username"