Fork me on GitHub

企业实战之Spring拦截器《解决跨域问题》

跨域是什么?

跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站时,浏览器出于安全考虑,自动阻止了对跨域服务的访问(包括对后端数据的增删改查请求),这里浏览器统一遵循了一种策略,这个策略就是同源策略,同源策略也是浏览器最核心、最基本的安全功能。

什么情况下会发生跨域?

Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

原文地址 https://cloud.tencent.com/developer/article/1445325

有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道松哥说的是对的了!

在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图:

在这样的架构中,会出现一些单服务中不存在的问题,例如客户端发起一个请求,这个请求到达 Nginx 上之后,被 Nginx 转发到 Tomcat A 上,然后在 Tomcat A 上往 session 中保存了一份数据,下次又来一个请求,这个请求被转发到 Tomcat B 上,此时再去 Session 中获取数据,发现没有之前的数据。对于这一类问题的解决,思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方(主流方案就是 Redis):

当所有 Tomcat 需要往 Session 中写数据时,都往 Redis 中写,当所有 Tomcat 需要读数据时,都从 Redis 中读。这样,不同的服务就可以使用相同的 Session 数据了。

这样的方案,可以由开发者手动实现,即手动往 Redis 中存储数据,手动从 Redis 中读取数据,相当于使用一些 Redis 客户端工具来实现这样的功能,毫无疑问,手动实现工作量还是蛮大的。

一个简化的方案就是使用 Spring Session 来实现这一功能,Spring Session 就是使用 Spring 中的代理过滤器,将所有的 Session 操作拦截下来,自动的将数据 同步到 Redis 中,或者自动的从 Redis 中读取数据。

对于开发者来说,所有关于 Session 同步的操作都是透明的,开发者使用 Spring Session,一旦配置完成后,具体的用法就像使用一个普通的 Session 一样。

阅读更多...

ubuntu查看占用某端口的程序

原文地址 ubuntu查看占用某端口的程序

查看端口使用情况,使用netstat命令。

查看已经连接的服务端口(ESTABLISHED

1
netstat -a

查看所有的服务端口(LISTEN,ESTABLISHED)

netstat -ap

查看8080端口,则可以结合grep命令:

netstat -ap | grep 8080

如查看8888端口,则在终端中输入:

1
lsof -i:8888 

若要停止使用这个端口的程序,使用kill +对应的pid即可

迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的最清楚的好文章(建议收藏)

原文地址 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的最清楚的好文章(建议收藏)

网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来。

常规的误区

假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据。

如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTTP响应,然后继续往下执行。

这个时候你问别人,刚刚代码发起的这个请求是不是一个同步请求,对方一定回答是。这是对的,它确实是。

但你要问它为什么是呢?对方一定是这样回答的,“因为发起请求后,代码就卡住不动了,直到拿到响应后才可以继续往下执行”。

我相信很多人也都是这样认为的,其实这是不对的,是把因果关系搞反了: 不是因为代码卡住不动了才叫同步请求,而是因为它是同步请求所以代码才卡住不动了。 至于为什么能卡住不动,这是由操作系统和CPU决定的: 因为内核空间里的对应函数会卡住不动,造成用户空间发起的系统调用卡住不动,继而使程序里的用户代码卡住不动了。 因此卡住不动了只是同步请求的一个副作用,并不能用它来定义同步请求,那该如何定义呢?

同步和异步

所谓同步,指的是协同步调。既然叫协同,所以至少要有2个以上的事物存在。协同的结果就是: 多个事物不能同时进行,必须一个一个的来,上一个事物结束后,下一个事物才开始。 那当一个事物正在进行时,其它事物都在干嘛呢?

严格来讲这个并没有要求,但一般都是处于一种“等待”的状态,因为通常后面事物的正常进行都需要依赖前面事物的结果或前面事物正在使用的资源。 因此,可以认为,同步更希望关注的是从宏观整体来看,多个事物是一种逐个逐个的串行化关系,绝对不会出现交叉的情况。 所以,自然也不太会去关注某个瞬间某个具体事物是处于一个什么状态。

阅读更多...
  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信