认证授权分析
用户在进行资源访问时,要求系统要对用户进行权限控制,其具体流程如图所示:
SpringSecurity 认证逻辑实现
自定义登录逻辑
1.定义security配置类
2.定义登录接口实现类,自定义登录逻辑
1.基于用户名从数据库查询用户信息
2.1如果没有查到抛出usernameNotFoundException
2.2查询成功,将用户信息封装到UserDetails对象中返回
3.修改安全配置类
1.关闭跨域攻击,不关闭容易出错
2.自定义登录表单
2.1.设置登录页面
2.1.1设置请求用户名参数为username(默认就是username,可以自己修改,需要与表单同步
2.1.2设置请求密码参数为password(默认就是password,可以自己修改,需要与表单同步
2.2.设置登录请求处理地址
2.3.设置登录成功跳转页面
2.4.登录失败访问的页面
3.认证设计
3.1设置要放行的资源
3.2设置需要认证的请求
4.配置异常处理对象
4.1处理没有认证的异常(DefaultAuthenticationEntryPoint)
4.2处理没有权限的异常(DefaultAccessDeniedExceptionHandler)
总结(Summary)
重难点分析
SpringSecurity 产生背景?
SpringSecurity 快速入门?(依赖,配置,登录认证,密码的加密-启动生成,配置文件)
SpringSecurity 认证逻辑分析及实践?(认证方式-用户名和密码,登录页
面,SecurityConfig.UserServiceDetail,成功,失败,放行)
SpringSecurity 授权逻辑分析及实现?(为什么,授权步骤,用到的注解)
FAQ 分析
如何理解认证?(判定用户身份的合法性)
如何校验用户身份的合法性?(用户密码,指纹,刷脸,刷身份证,…)
如何进行身份认证?(自己写认证逻辑,借助框架去写认证逻辑-尊重框架规则)
市场上的认证和授权框架有哪些?(SpringSecurity,Shiro)
为什么会选择SpringSecurity?(功能强大,SpringBoot诞生后在配置方面做了大量的简化)
SpringSecurity中的加密方式你用的什么?(Bcrypt,底层基于随机盐方式对密码进行hash不可逆加密,更加安全,缺陷是慢)
SpringSecurity中你用过哪些API?(BcryptPasswordEncoder,UserDetailService,UserDetail,User,
AuthenticationSuccessHandler,AuthenticationFailureHandler,…)
为什么要进行权限控制?(防止非法用户破坏数据)
SpringSecurity进行权限控制的步骤(@EnableGlobalMethodSecurity,@PreAuthorize)
SpringSecurity在进行认证和授权时可能出现的异常?
SpringSecurity在未认证和未授权的前提下访问授权资源时,出现的异常如何处理?
作业:用户登录成功以后,用户信息默认存在哪里了? (Session)
作业:用户登录成功以后,如何获取我们登录的用户信息?(这个用户的用户名,这个用户的权限)