-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
130 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
--- | ||
title: DelegatingFilterProxy介绍 | ||
date: 2024-09-20 | ||
author: chensino | ||
publish: true | ||
isOriginal: true | ||
--- | ||
|
||
### 作用 | ||
|
||
在典型的 Spring 应用中,ContextLoaderListener 通常用于加载 Spring 的应用上下文(ApplicationContext),并管理其中定义的 Spring Bean。然而,Servlet 容器在启动时,会优先初始化过滤器(Filter)实例,而此时 Spring 上下文可能还没有完全加载。 | ||
|
||
#### 具体解析: | ||
|
||
1. ContextLoaderListener: | ||
|
||
- ContextLoaderListener 是 Spring 中常见的监听器,负责在应用启动时加载 Spring 的 ApplicationContext,从而初始化应用中的所有 Spring Bean。这通常是在应用启动的较晚阶段完成的。 | ||
- ContextLoaderListener 会监听 Web 应用的启动事件,并在合适的时机加载和管理 Spring 上下文。 | ||
|
||
2. Servlet 过滤器的加载顺序: | ||
|
||
- 在典型的 Servlet 容器(如 Tomcat)中,过滤器的实例化和注册会在应用启动的早期阶段进行,即在应用的主业务逻辑启动之前。 | ||
- 这些过滤器的初始化是 Servlet 容器的一部分,不依赖于 Spring 的 ApplicationContext。换句话说,过滤器的生命周期由 Servlet 容器本身管理,而不受 Spring 管理的影响。 | ||
|
||
3. 问题所在: | ||
|
||
- 因为过滤器(Filter)的实例需要在 Spring 上下文加载之前注册,而 Spring 的 Bean 管理是由 ContextLoaderListener 在较后阶段完成的,这就导致了过滤器实例在创建时无法直接依赖于 Spring 的 Bean 或上下文。如果直接在 web.xml 中定义过滤器,过滤器实例会在 Spring 上下文加载完成之前被创建。 | ||
|
||
#### 解决方案——DelegatingFilterProxy: | ||
|
||
- DelegatingFilterProxy 可以解决这个问题。它允许 Servlet 容器在初始化过滤器时,并不直接创建过滤器的实际实例,而是通过代理的方式,将过滤器的执行逻辑委托给 Spring 上下文中的某个 Bean。这样,过滤器的真正逻辑就可以依赖于 Spring 容器管理的 Bean。 | ||
- 具体来说,DelegatingFilterProxy 本身是一个标准的 Servlet 过滤器,在容器启动时被注册。但是它在处理过滤时,会去查找 Spring 上下文中已经定义好的过滤器 Bean(例如 Spring Security 的 FilterChainProxy),并将请求委托给这个 Spring 管理的过滤器 Bean。 | ||
|
||
#### 总结: | ||
|
||
- 问题:在传统的 Servlet 应用中,过滤器的初始化顺序早于 Spring 上下文的加载,这导致无法将 Spring 的依赖注入直接应用于过滤器。 | ||
- 解决:通过使用 DelegatingFilterProxy,可以将过滤器的创建延迟到 Spring 上下文加载完成之后,由 Spring 容器管理过滤器实例的生命周期,使得过滤器可以正常依赖 Spring Bean。 | ||
因此,DelegatingFilterProxy 是一个桥梁,它确保即使 Servlet 容器在 Spring 上下文加载之前注册过滤器,过滤器的实际执行逻辑依然能够使用 Spring 管理的 Bean 和资源。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
--- | ||
title: pve防火墙 | ||
date: 2024-09-29 | ||
author: chensino | ||
publish: true | ||
isOriginal: true | ||
--- | ||
|
||
参考:<https://www.xh86.me/?p=11324> | ||
|
||
### 一、防火墙简介 | ||
|
||
pve有3个层级防火墙: | ||
|
||
1. 数据中心的防火墙 | ||
2. 节点防火墙(主机防火墙) | ||
3. 虚拟机防火墙 | ||
|
||
![20240929173211](https://afatpig.oss-cn-chengdu.aliyuncs.com/blog/20240929173211.png) | ||
|
||
#### 1.1 数据中心防火墙 | ||
|
||
数据中心,是由节点组成的一个集群。 | ||
可以说,数据中心防火墙,是专门处理集群流量的防火墙。 | ||
|
||
==只有数据中心防火墙开启,才能开启集群内的防火墙,否则单独开启vm的防火墙是无效的。== 它是一个总开关 | ||
|
||
#### 1.2 主机防火墙 | ||
|
||
主机防火墙,只负责处理虚拟化服务器上的流量,比如一台pve服务器ip为192.168.1.2。 | ||
|
||
那么这个防火墙,只会关注192.168.1.2的流量。下面的虚拟机流量是独立开的。 | ||
|
||
这个防火墙的开关,不会影响vm的防火墙,所以要开启vm的防火墙,不必须开启这个防火墙,不同于数据中心防火墙。 | ||
|
||
说的直白一点就是这个防火墙控制的就是pve那个debian系统本身,比如pve的web管理页面(8006端口)、ssh等 | ||
|
||
#### 1.3 虚拟机防火墙 | ||
|
||
这个就是系统级别的防火墙了,和我们平时用的物理机防火墙就是一样的了 | ||
|
||
### 二: 防火墙配置文件 | ||
|
||
pve的防火墙配置文件在下面路径 | ||
|
||
~~~shell | ||
#数据中心防火墙 | ||
|
||
/etc/pve/firewall/cluster.fw | ||
|
||
#主机防火墙 | ||
|
||
/etc/pve/nodes/<nodename>/host.fw | ||
|
||
#vm和lxc的防火墙 | ||
|
||
/etc/pve/firewall/<VMID>.fw | ||
~~~ | ||
|
||
### 三、实际配置 | ||
|
||
#### 3.1 配置主机防火墙 | ||
|
||
目的是实现pve系统收到保护,我不想让别人的ip随便登录我的pve管理界面,以及远程我的sshd服务 | ||
|
||
1、 开启数据中心防火墙(必须开,否则所有防火墙就不生效) | ||
|
||
![20240929174029](https://afatpig.oss-cn-chengdu.aliyuncs.com/blog/20240929174029.png) | ||
|
||
2、设置别名 | ||
|
||
在数据中心设置一个别名,方便在其他地方引用,当然也可以在虚拟机防火墙设置也行,这里我犯了一个严重错误导致浪费很长时间。我的目的是想让所有192.168内网都放行,结果我写成192.168.0.0/24,这个放行的其实是192.168.0.1到192.168.0.255,正确写法应该是192.168.1.0/24 | ||
|
||
![20240929174255](https://afatpig.oss-cn-chengdu.aliyuncs.com/blog/20240929174255.png) | ||
|
||
3、在主机防火墙引入上一步设置的别名 | ||
|
||
![20240929174733](https://afatpig.oss-cn-chengdu.aliyuncs.com/blog/20240929174733.png) | ||
|
||
4、开启主机防火墙 | ||
|
||
![20240929174802](https://afatpig.oss-cn-chengdu.aliyuncs.com/blog/20240929174802.png) | ||
|
||
#### 3.2 开启虚拟机级别防火墙 | ||
|
||
1、2步同上,3、4步也差不多,不过要点到对应的虚拟机再设置。 | ||
|
||
![20240929174925](https://afatpig.oss-cn-chengdu.aliyuncs.com/blog/20240929174925.png) | ||
|
||
![20240929174938](https://afatpig.oss-cn-chengdu.aliyuncs.com/blog/20240929174938.png) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
//js冒泡排序函数 | ||
function bubbleSort(arr) { |