简介
Spring Security是一个专注于为Java 应用程序提供身份认证和授权的框架,它的强大之处在于它可以轻松扩展以满足自定义的需求
特征
对身份的 认证 和 授权
防止各种攻击,如会话固定攻击、点击劫持、csrf攻击等
支持与 Servlet API[Java EE]、Spring MVC等 Web技术集成
登陆检查
之前采用拦截器实现了登录检查,这是简单的权限管理方案,现在将其废弃
授权配置
对当前系统内包含的所有请求,分配访问权限(普通用户、版主、管理员)
认证方案
绕过Security 认证流程,采用系统原来的认证方案
// Security 底层默认会拦截 /logout 请求, 进行退出处理 // 覆盖 默认逻辑, 才能执行我们自己的逻辑代码 // 这里写一个不存在的逻辑, 欺骗底层替换它的退出路径, 使得我们自己的退出逻辑"/logout"得以执行 http.logout().logoutUrl("/securitylogout");
CSRF配置
跨站请求伪造(英语:Cross-site request forgery)
恶意网站劫持了, 当前用户的 cookie, 伪造身份窃取用户信息
防止CSRF 攻击的基本原理, 以及表单、AJAX相关的配置
功能实现
点击 置顶,修改帖子的类型
点击 “加精”、“删除”,修改帖子的状态
权限管理[Spring Security赋权]
版主可以执行“置顶”、“加精”操作
管理员可以执行“删除”操作
按钮显示
版主可以看到“置顶”、“加精”按钮
管理员可以看到“删除”按钮
对网站的运营数据进行统计, 优点: 节约内存, 效率高
HyperLogLog[ 超级日志 ]
采用一种基数算法, 用于完成独立总数的统计
占据空间小, 无论统计多少个数据, 只占 12K 的内存空间
不精确的统计算法, 标准误差为 0.81%【最终结果非精确】
Bitmap[ 位图 ]
不是一种独立的数据结构, 实际上就是字符串
支持按位存取数据, 可以将其看成是 byte 数组
适合存储大量的连续的数据的布尔值
多组数据可以进行运算, 逻辑运算 [ 与 | 或 | 非 ]
UV ( Unique Visitor )
独立访客,需要通过用户 IP 排重统计数据
每次访问都要进行统计
HyperLogLog,性能好,且存储空间小
DAU ( Daily Active User)
更加关注的是 登录用户的ID
更关注用户的有效性,要求精确结果
日活跃用户, 需要通过用户 ID 排重统计数据
访问过一次, 则认为其活跃
Bitmap, 性能好、且可以统计精确的结果
JDK 线程池
ExecutorService
ScheduledExecutorService
Spring 线程池
ThreadPoolTaskExecutor
ThreadPoolTaskScheduler
分布式定时任务
Spring Quartz
三个关键接口
Scheduler: 定时任务执行器, Quartz 的底层调度器
Job: 任务接口, 包括对任务分组
Trigger: 任务触发器, 配置 Job 运行时间, 运行频率
// FactoryBean : 可简化Bean 的实例化过程: // 1. Spring 通过FactoryBean 封装Bean 的实例化过程. // 2. 将 FactoryBean 装配到Spring 容器里. // 3. 将 FactoryBean 注入给其他的Bean. // 4. 该Bean[ 3. 中的Bean] 得到的是 FactoryBean 所管理的对象实例.
每个网站都有自己的计算公式
依据自己网站需求进行 计算逻辑设计
固定时间周期进行热帖计算, 刷新
利用Quartz 完成定时计算任务
下面是三个参考网站的分数计算方式:
Hacker News
Score = ( P - 1 ) / ( T + 2 ) ^ G
StackOverflow
(log(Qviews)*4) + ((Qanswers * Qscore) / 5) + sum(Ascores)
-----------------------------------------------------------
((QageInHours + 1)) - ((QageInHours) - (Qupdated)/2) ^ 1.5
Nowcoder
log(精华分 + 评论数*10 + 点赞数 * 2 + 收藏数 * 2) + (发布时间 - 牛客纪元[网站发布日期] )
wk<html>topdf
wkhtmltopdf url file
wkhtmltoimage url file
注意: WKHTMLTOPDF 命令的使用, 需要提前手动创建好存储目录
CMD命令行,运行命令
pdf文件成功生成
CMD 命令生成 html 网页的图片文件
图片文件生成成功
生成原图的压缩图片【--quality 75: 压缩为原图的 75%】
可以看到新图【2.png】是原图【1.png】比原图的大小明显缩小
java
Runtime.getRuntime().exec()
String cmd="d:/work/wkhtmltopdf/bin/wkhtmltoimage --quality 75 http://www.nowcoder.com d:/work/data/wk-images/3.png";
try {
Runtime.getRuntime().exec(cmd);
System.out.println("ok.");
} catch (IOException e) {
e.printStackTrace();
}
参考网站: https://wkhtmltopdf.org
选择对应安装版本
安装完成后,配置 bin 目录到环境变量中
Path中新建项
客户端上传
客户端将数据提交给云服务器, 并等待其响应。
用户上传头像时, 将表单数据提交给云服务器。
服务器直传
应用服务器数据直接提交给云服务器,并等待其响应。
分享时,服务端将自动生成的图片,直接提交给云服务器。
上传服务器网站
七牛云存储服务
本地缓存
将数据缓存在应用服务器上, 性能最好
常用缓存工具: Ehcache、Guava、Caffeine等。
本次项目选用 Caffeine 实现
分布式缓存
将数据缓存在NoSQL数据库上,跨服务器
常用缓存工具:MemCache、Redis等
多级缓存
一级缓存(本地缓存)---> 二级缓存(分布式缓存) ---> DB
避免缓存雪崩(缓存失效,大量请求直达DB),提高系统的可用性。
压力测试软件:
jmeter, 一款apache 出的压力测试软件
网站:
原文:https://www.cnblogs.com/77-is-here/p/13763138.html