Spring Security默认过滤器链解析(十二)

1.DefaultLoginPageGeneratingFilter 默认登录页生成

从名字就可以看出,这是默认登录页生成过滤器。内容比较简单,就简单过一下。

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		// 是不是异常页面
		boolean loginError = isErrorPage(request);
		// 是不是登出成功页面
		boolean logoutSuccess = isLogoutSuccess(request);
		if (isLoginUrlRequest(request) || loginError || logoutSuccess) {
			// 登录的,异常的,登出成功的都返回登录页面
			// 这里进行页面生成
			String loginPageHtml = generateLoginPageHtml(request, loginError,
					logoutSuccess);
			response.setContentType("text/html;charset=UTF-8");
			response.setContentLength(loginPageHtml.getBytes(StandardCharsets.UTF_8).length);
			response.getWriter().write(loginPageHtml);

			return;
		}

		chain.doFilter(request, response);
	}

登录页面生成有好几种:

表单登录: formLogin

openId登录:openId

oauth2登录:oauth2Login

saml2登录:saml2Login

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nGxRV325-1626158128489)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bba56aa5-e562-4e5d-bdfb-7cc0ffe6c2cb/Untitled.png)]



2.DefaultLogoutPageGeneratingFilter 默认登出页生成

登出页就没有登录页那么复杂了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YApsyUXj-1626158128492)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4cfbb371-2086-4b3d-a5a7-f67c8282583a/Untitled.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irMrxgUF-1626158128494)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/30efe74e-30e3-45f4-a07a-8c2106f0a398/Untitled.png)]



3.BasicAuthenticationFilter

这个跟表单认证不同,这是HTTP基本认证(Basic Authentication),至于什么是Basic认证,请参考《HTTP Basic 认证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eGd1320x-1626158128503)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6db849e1-2c16-4189-a496-cf8e3f219612/Untitled.png)]

看一下Basic如何从header中解析出用户名和密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BahF4bgi-1626158128506)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cf18d94a-5cc8-4dbe-8130-2e844564e25c/Untitled.png)]

上面其实就是从头信息中获取Authorization的参数,然后将值进行base64解码。然后进行通过冒号 进行分隔,前面是用户名,后面是密码。

其实从这里可以看出。Basic其实不适用于外网使用,跟裸奔一样。适用于高安全性的内部网络使用。



4.RequestCacheAwareFilter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ytwti838-1626158128508)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/abb4b183-f0e2-4a7c-aff4-c8dad13a2bcf/Untitled.png)]



5.SecurityContextHolderAwareRequestFilter

这里是将request又包装了一遍,将SecurityContextHolder包装进去,同时还增加了Servlet3对异步获取SecurityContextHolder的支持。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaPz2Gu9-1626158128509)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c60cd533-ce61-4969-b841-522857e99ae0/Untitled.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zaZmqw3e-1626158128511)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d8ed29c4-5051-4979-8bdc-9d7499465789/Untitled.png)]



6.AnonymousAuthenticationFilter 匿名认证对象

每个匿名对象都要像真正的认证对象一样有userName,password,authority。

其中key(userName)的生成方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MpUu05CC-1626158128512)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eabc64ba-8d32-42f5-bf8a-559dde8ac8fd/Untitled.png)]

password和权限:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgfT2j4Y-1626158128513)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2f94cf97-e8ee-417a-ae4e-437e60fb5feb/Untitled.png)]

所以这个类就是生成了一个匿名认证对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7pMAd6DA-1626158128514)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1d072e0d-0675-4fb8-9d21-54eb24b3f0a4/Untitled.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zlpppYKu-1626158128515)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/337116fd-d2a5-48f0-86e2-27ead37ce314/Untitled.png)]



7.小结

今天看了一下6个Filter,还有3个,明天继续~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欢谷悠扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值