- 编程语言81
- 案例70
- 大数据55
- 中间件48
- 电子书42
- 数据库42
- Go30
- 开源27
- 人工智能25
- CI&CD24
- 软件工程23
- 设计模式23
- Python21
- 数据仓库21
- 任正非20
- Docker20
- 杂项20
- JMeter17
- 微服务15
- 移动端15
- HarmonyOS15
- MySQL15
- Flink14
- 节略章节合辑13
- 软件许可证13
- 原型解构13
- 数据库设计13
- 新零售13
- 分库分表13
- 应用12
- 社交平台12
- 关系推荐12
- 数据科学基础12
- 关于11
- 胡言乱语11
- Linux11
- Clickhouse11
- 集成10
- 原型工具10
- 开发过程10
- Java10
- Spark10
- RocketMQ10
- Axure9
- U-AIGC9
- UI原型9
- Scala8
- Groovy8
- 兼容GPL的许可证8
- 产品经理8
- 智能硬件8
- 大数据风控8
- 爬虫8
- MongoDB8
- Kotlin8
- LUA8
- 程序员的数学7
- 短视频7
- APP7
- Hive7
- 七大设计原则7
- ArkTS7
- GPT6
- API6
- Hadoop6
- HBase6
- 领域模型6
- Kafka6
- Spring Security6
- Java高并发6
- 关于我5
- 开源常识5
- 车联网5
- Redis5
- Aviator5
- Flume5
- Caffeine5
- Google Guava5
- 毛泽东选集4
- 工具4
- 特色农产品4
- 文档许可证4
- 自由文档许可证4
- 其他许可证4
- 可穿戴产品4
- 流水线4
- Elasticsearch4
- Neo4j4
- 技术论文3
- 我写的书3
- 跑腿闪送3
- 设计心理学3
- 分布式3
- Android3
- 不兼容GPL的许可证3
- 电商3
- PC端3
- Apache Commons3
- Drools2
- 非自由软件许可证2
- 用户研究2
- 个人爱好1
- 个人能力1
- 超级个体1
- 第一卷1
- AIGC1
- 视觉交互设计1
- 数学1
- 站点部署1
- 智能穿戴1
- Balsamiq Mockups1
- Apache1
- AB压测1
- 第二卷1
- 第三卷1
- 第四卷1
- captcha1
- FaceRecognition1
- 地图1
- OSS1
- 支付1
- PUSH1
- OAuth 2.01
- SMS1
- weather1
- 综合性交互设计1
- 复杂设计1
- 情感设计1
- 云原生1
- 全局唯一ID1
- 幂等性1
- 事务1
- 瀑布模型1
- Azkaban1
- Canal1
- FileBeat1
- Sqoop1
- Zepplin1
- Lua1
- 加密算法1
- SSL1
- TLS1
- CA证书1
- HTTPS1
- Spring AI1
- 用户体验五要素1
- UFD分析法1
- 产品类型1
- 盈利模式1
- 可行性判断1
- 定价策略1
- 黑盒测试1
- 灰度测试1
- AB测试1
- PEST1
- SWOT1
- MRD1
- PRD1
- KANO模型分析1
- 需求价值分析1
- 车机交互1
- 分布式事务1
- Matplotlib1
- Pandas1
- Numpy1
- Scipy1
- Impala1
- 合成复用原则1
- 迪米特法则1
- 依赖反转原则1
- 接口隔离原则1
- 里氏替换原则1
- 开闭原则1
- 单一职责原则1
- 敏捷过程1
- RUP1
- UML1
- ERD1
- ElasticSearch1
- Cangjie1
- Cache1
- EventBus1
- common-fileupload1
- commons-lang31
角色继承
有时候角色与用户并不是完全一一对应的,在刚开始的时候,admin
用户可能只有ROLE_ADMIN
角色,manager
用户也只有ROLE_MANAGER
角色。
但如果希望给admin
用户授予manager
的角色,该怎么办呢?
这就需要用到Spring Security的角色继承
功能了。
自定义过滤器
有时某些业务或者功能,需要在用户请求到来之前就进行一些判断或执行某些动作,就像在Servlet中的FilterChain
过滤器所做的那样,Spring Security也有类似机制。
remember-me
保存到Cookie
在很多应用中,用户不必每次都输入用户名密码才能访问,而是通过勾选记住我(remember-me)
来让浏览器Cookie记住用户的登录状态,以便下次无需登录就能访问应用。
Spring Security实现这个功能很简单,只需要对WebSecurityConfiguration
做一点小改动即可。
自定义处理器
之前除了/login
接口能成功,另外两个都失败并不是因为代码问题,而是Spring Security默认是通过Web页面来实现页面逻辑跳转的。
但在前后端分离的开发模式中,页面跳转的逻辑后端已经不能直接控制了,而是通过返回状态码由前端来执行跳转,因此,需要对应用进行改造,自定义一个登录成功处理器。
要定义这样的处理器,只需要实现Spring Security预先提供的一系列接口XXXHandler
接口就行了。
在开始配置Spring Security之前,有必要大致了解一下它的登录流程做个。
-
Spring Security进行身份验证的是
AuthenticationManager
接口。 -
ProviderManager
是AuthenticationManager
的一个默认实现。 -
ProviderManager
把验证工作委托给了AuthenticationProvider
接口。 -
AuthenticationProvider
的实现类DaoAuthenticationProvider
会检查身份认证。 -
DaoAuthenticationProvider
又把认证工作委托给了UserDetailsService
接口。 -
自定义
UserDetailsService
类从数据库中获取用户账号、密码、角色等信息,然后封装成UserDetails
返回。 -
使用Spring Security还需要自定义
AuthenticationProvider
接口,获取用户输入的账号、密码等信息,并封装成Authentication
接口。 -
将
UserDetails
和Authentication
进行比对,如果一致就返回UsernamePasswordAuthenticationToken
,否则抛出异常。
Spring Security是一个重量级的RBAC权限管理框架,当SpringMVC还是主流开发框架的时候,因为它的配置比较繁琐,所以事实上Shiro用得更多。
改造支付应用
Google Guava提供了EventBus(事件总线)机制,它是发布-订阅模式的实现,不需要显式地注册回调,比观察者模式更灵活。
从CPU高速缓存
、操作系统缓存
到HTTP缓存
,再到静态文件缓存
,IT系统中到处都有缓存的身影存在。
按照范围不同,缓存又分为进程内缓存
和进程外缓存
按照架构不同,它又分为本地缓存
和分布式缓存
。
而进程内缓存
又分为组件缓存
和第三方缓存
。
-
组件缓存
是在程序内使用变量来存储数据,例如,Java中的List
、Map
和Set
等集合组件就常常用作这样的缓存。 -
第三方缓存
是利用第三方组件在系统运行时存储数据,例如,目前用的比较多的Ehcache和Guava Cache。