SpringSecurity
2022-08-08 22:17:57 0 举报
AI智能生成
SpringSecurity基础知识及概念
作者其他创作
大纲/内容
OAuth2
应用场景
系统与系统之间实现对接
第三登录认证
微信登录
sina
qq
github
openAPI
人脸识别
OAuth2 认证流程
授权码模式(安全 使用频率较高)
1.执行授权
2.同意授权(微信:扫描二维码)
3.返回授权码给客户端(网站)
4.根据授权码换取令牌(accessToken)
5.根据accessToken 获取第三方资源信息(用户头像 用户用户名)
密码模式
一个公司内容多个系统用户信息共享
微信--QQ
SpringSecurity 整合OAuth2
授权端点(返回授权码)
生成token &校验token Token EndPoint
资源端点
Jwt(Json Web Token)
常见认证机制
1.Http Basic Auth
2.Cookie(Session)
3.OAuth2
4.Jwt 认证(前后端分离开发 APP开发)
JJwt
token签发
Header
Payload
加密内容
token 校验
权限框架(SpringSecurity-Core)
分类
SpringSecurity
Apache Shiro
解决的两个核心问题
认证
授权
SpringSecurity
Spring 社区开源子项目
默认存在IOC AOP
基于配置(配置类中配置权限基本操作)
SpringSecurity 入门
环境搭建
创建Maven 工程
添加依赖(spring-boot-parent,start-web,start-security)
添加启动程序
默认所有资源必须登录后才可访问(user|密码(程序启动生成))
自定义登录逻辑处理
API对象
UserDetailsService
loadUserByUserName
UserDetails(登录用户信息)
用户名
密码
权限
PasswordEncoder
encode
matches
自定义登录
自定义登录后端代码实现
1.实现UserDetailsService接口
2.配置PasswordEncode 接口实现类(SecurityConfig)
自定义表单配置
1.SecurityConfig 配置类 继承 WebSecurityConfigureAdaptor 重写configure(http)
2.configure 方法中加入自定义表单配置
1.禁用csrf 配置
2.提供自定义表单配置
1.formLogin()
指定登录页面url(/login.html)
指定处理登录请求的地址(/login)
指定登录成功||失败跳转处理
1.指定跳转的页面(success&failed)
2.指定Handler 处理(success&failed)
2.配置访问的资源权限 http.authorizeRequests
配置放行资源
antMatchers(....).permitAll()
配置需要登录才可访问的资源
.anyRequest().authenticated();
其他配置
自定义登录表单参数
usernameParameters()
passwordParameter()
form表单name 与自定义表单参数名一致
error.html
访问URL匹配
antMatchers(***)
ant 表达式
?
*
**
regexMatchers(了解)
基于正则表达式
mvcMatchers(了解)
程序存在上下文路径
anyRequest
.authenticated() 结合使用
内置访问控制方法
permitAll(***)
对匹配的资源放行处理
denyAll()
不允许任何用户访问
anonymous()
允许匿名访问
rememberme()
记住我时允许访问
fullyAuthenticated()
对rememberme() 取反
403 没有权限处理
实现AccessDenyHandler 接口
基于表达式的访问控制(access)
permitAll()
denyAll()
hasAuthority
hasRole
hasAnyRole
hasAuthority
@id.方法(方法返回boolean)
基于注解的访问控制
@Secured("Role_xxx")
@PreAuthorize("hasAuthority('')")|| @PreAuthorize("hasAnyAuthority('')") 方法执行前
@PostAuthorize("hasAuthority('')") 方法执行后
集成Thymeleaf
结合SpringSecurity 标签实现页面内容输出(根据用户拥有权限) (菜单、按钮、超链接)
记住我(RememberMe)
1.SpringSecurityConfig
htpp.rememberme()
2.form 表单(checkbox name=rememeber-me)
预防CSRF跨站请求伪造
1.SpringSecurity 默认开启CSRF
2.登录表单添加隐藏域
收藏
收藏
0 条评论
下一页