java 责任链 开源代码,JavaThinker技术网站

news/2024/5/20 15:31:22/文章来源:https://blog.csdn.net/weixin_28040125/article/details/116038111

责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

责任链模式也叫职责链模式。

在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。

责任链模式是一种对象行为型模式,其主要优点如下。 降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。 增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则。 增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责任。 责任链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。 责任分担。每个类只需要处理自己该处理的工作,不该处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。

模式结构 职责链模式主要包含以下角色: 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

源码导读 在 spring security 中其核心设计模式就是责任链模式;它通过注册过滤器链来实现责任链模式,每个过滤器链都只做一件事。springSecurity的责任链顺序如下

WebAsyncManagerIntegrationFilter:将Security上下文与Spring Web中用于处理异步请求映射的 WebAsyncManager 进行集成。

SecurityContextPersistenceFilter:在每次请求处理之前将该请求相关的安全上下文信息加载到SecurityContextHolder中,然后在该次请求处理完成之后,将SecurityContextHolder中关于这次请求的信 息存储到一个“仓储”中,然后将SecurityContextHolder中的信息清除 例如在Session中维护一个用户的安全信息就是这个过滤器处理的。

HeaderWriterFilter:用于将头信息加入响应中

CsrfFilter:用于处理跨站请求伪造

LogoutFilter:用于处理退出登录

UsernamePasswordAuthenticationFilter:用于处理基于表单的登录请求,从表单中获取用户名和密码。默认情况下处理来自“/login”的请求。从表单中获取用户名和密码时,默认使用的表单name值为“username”和“password”,这两个值可以通过设置这个过滤器的usernameParameter 和 passwordParameter 两个参数的值进行修改。

DefaultLoginPageGeneratingFilter:如果没有配置登录页面,那系统初始化时就会配置这个过滤器,并且用于在需要进行登录时生成一个登录表单页面。

BasicAuthenticationFilter:检测和处理http basic认证

RequestCacheAwareFilter:用来处理请求的缓存

SecurityContextHolderAwareRequestFilter:主要是包装请求对象request

AnonymousAuthenticationFilter:检测SecurityContextHolder中是否存在Authentication对象,如果不存在为其提供一个匿名Authentication

SessionManagementFilter:管理session的过滤器

ExceptionTranslationFilter:处理 AccessDeniedException 和 AuthenticationException 异常

FilterSecurityInterceptor:可以看做过滤器链的出口

RememberMeAuthenticationFilter:当用户没有登录而直接访问资源时, 从cookie里找出用户的信息, 如果Spring Security能够识别出用户提供的remember me cookie, 用户将不必填写用户名和密码, 而是直接登录进入系统,该过滤器默认不开启。 而责任链的客户类是 HttpSecurity,它负责对责任链的创建和管理,它的 addFilterAt(Filter filter, Class atFilter) 方法可在责任链中添加一个过滤器。 在这个框架中 过滤器作为了 抽象处理者(Handler的角色,各个具体的过滤器类是 具体处理者(Concrete Handler角色  HttpSecueiry是 客户类角色。

点击关注我的博客

----------------------------

原文链接:https://www.cnblogs.com/muggle0/p/12590841.html

转载请注明:来源于www.javathinker.net

3dd1074a97e1f4d4e13ff3196189bc81.png

[这个贴子最后由 flybird 在 2020-03-30 18:24:33 重新编辑]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_814255.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MOSS2007工作组网站使用:在WSS网站中使用“事件”

11.3 在WSS网站中使用“事件” 对于单位来说,每过一段时间,都有一些固定的“事件”要通知或者要发生,例如:对于财务部门来说,每月固定的日子给大家发工资;对于办公室来说,每周上午可能要开例会&…

WordPress建站指南

前言:WordPress是我所见的博客服务程序中最好的了,可以灵活配置出令人难以置信的华丽界面,以及很多新奇有趣的功能,在享受新奇乐趣的同时,学习和分享,实在是人生一大快事。有图有真相,附上我的W…

让你的网站心跳起来

有时候你希望你的页面“一直活着”。也就是说,如果一个用户填写一个复杂的表单,在用户完成之前。你一定不希望session过期。否者用户可能因此变得非常恼怒。 这也不是简单的加长session过期时间的事情。如果你这样做,当访问页面的用户离开…

.NET开发人员必知的八个网站

当前全球有数百万的开发人员在使用微软的.NET技术。如果你是其中之一,或者想要成为其中之一的话,我下面将要列出的每一个站点都应该是你的最爱,都应该收藏到书签中去。 对于不熟悉.NET技术的朋友,需要说明一下,.NET提供…

网站分析

1、www.qq.com 在pc端和移动端是分为两套代码来写的。 pc端: 布局:整体的布局是从上往下的布局方式,没有特定的两栏、三栏布局,而是从上到下交错式排列。 整体的思想是width固定为1000px(无响应式)&#xf…

使用python3批量下载网站图片

0x01 Code import shutil import requests import os from bs4 import BeautifulSoupurlhttps://www.woyaogexing.com/touxiang/fengjing/def download_tupian(image_url,image_localpath):response requests.get(image_url,stream True) #下载文件需要设置stream为trueif r…

webmatrix mysql_WebMatrix教程(一) (关注Microsoft 的最新武器:建立你的第一个WebMatrix网站)...

“除非你睡着了或刚刚从一个长假回来,你应该已经注意到了,…,微软重新进入到了高效率开发者’的圈子中。” – Scott Willhite – Director of Community Programs from DotNetNuke微软是这样定义WebMatrix -- 一个全新的网络开发工具&#x…

60个抢眼的企业网站设计案例

企业网站设计的共同点是如何使潜在客户的注意他们的产品。换句话说,它定义了一个企业网站的设计的关键要素是突出企业特点和可访问性。为了更好地了解企业的​​设计要点,今天给大家推荐60个醒目的企业网站设计!希望大家喜欢

25个惊艳的复古网站设计欣赏

复古风格通过古典格调的形状、色彩、纹理、字体等组合,给予视觉上全新的感受,很容易从网页中脱颖而出,从而吸引用户。今天我们为大家带来25个精彩的复古网站设计,希望能给予你设计灵感。 visualrepublic forefathersgroup beautif…

网站图标ICO

效果图&#xff1a; 代码&#xff1a; 123456<head>...<link rel"shortcut icon" href"/favicon.ico" /><link rel"bookmark" href"/favicon.ico" type"image/x-icon" />...</head>转载于:https:/…

python爬取安居客二手房网站数据

之前没课的时候写过安居客的爬虫&#xff0c;但那也是小打小闹&#xff0c;那这次呢&#xff0c; 还是小打小闹 哈哈&#xff0c;现在开始正式进行爬虫书写 首先&#xff0c;需要分析一下要爬取的网站的结构&#xff1a; 作为一名河南的学生&#xff0c;那就看看郑州的二手房信…

网站备案是否真的需要关闭网站?

近期有好几个手上的单&#xff0c;本来已经有很好的收录和排名了&#xff0c;但是突然访问不了了&#xff01; 询问之下&#xff0c;原来是在申请备案&#xff0c;空间商强制关闭了网站&#xff01; 难道备案真的必须关闭网站&#xff1f;&#xff01;&#xff01;我们幸苦做出…

网站建设之关键词精准定位

为什么80%的码农都做不了架构师&#xff1f;>>> 你是否能在切图中关键词精准的定位呢&#xff1f;请运用“主谓宾定状补”去思考问题&#xff0c;从而去解读下来文章内容&#xff0c;感谢你的光临&#xff01; 关键词精准定位。做民营医院的网站已经有一年了&#…

分析网站原始访问日志

分析网站原始访问日志 Ludou 人气: 3,844 次我要评论( 21 )我要投稿文章目录 1、注意那些被频繁访问的资源 2、注意那些你网站上不存在资源的请求 3、观察搜索引擎蜘蛛的来访情况 4、观察访客行为 应敌之策 1、封杀某个IP 2、封杀某个浏览器类型&#xff08;Agent&#xff09; …

推荐几个知名顶级的文献网站

有人在后台给我留言&#xff0c;让我推荐几个查找文献的网站&#xff0c;周末特别花了点时间整理了一下。在这里推荐给大家&#xff0c;希望对大家有帮助&#xff01;本文总共分为2篇&#xff0c;一篇为国内的网站&#xff0c;一篇为国外的网站 。喜欢的朋友&#xff0c;记得长…

Android利用Jsoup解析html 开发网站客户端小记

这些天业余时间比较多&#xff0c;闲来无事&#xff0c;想起了以前看过开发任意网站客户端的一篇文章&#xff0c;就是利用jsoup解析网站网页&#xff0c;通过标签获取想要的内容。好了废话不多说&#xff0c;用到的工具为 jsoup-1.7.2.jar包&#xff0c;具体jsoup的相关文档&a…

Jsoup开发网站客户端第二篇,图片轮播,ScrollView兼容ListView

最近一段日子忙的焦头烂额&#xff0c;代码重构&#xff0c;新项目编码&#xff0c;导致jsoup开发网站客户端也没时间继续下去&#xff0c;只能利用晚上时间去研究了。今天实现美食网首页图片轮播效果&#xff0c;网站效果图跟Android客户端实现如图&#xff1a; 从浏览器开发者…

开发任意网站Android客户端教程

程序已经完成,源码下载: Yangtze.zip (2 MB, 下载次数: 5337) 2012-12-19 09:05 上传点击文件名下载附件 下载积分: 下载豆 -2 登陆是需要账号的,账号可能还要留着后续开发.而 我已经毕业了, 要是被改了我还真没法改回来了...所以就不提供了.如果有人特别想要登陆看看的,可以在…

一步步教你为网站开发Android客户端

本文面向Android初级开发者&#xff0c;有一定的Java和Android知识即可。文章覆盖知识点&#xff1a;HttpWatch抓包&#xff0c;HttpClient模拟POST请求&#xff0c;Jsoup解析HTML代码&#xff0c;动态更新ListView背景介绍&#xff1a;客户端&#xff08;Client&#xff09;或…

Android模拟登陆带验证码的网站客户端

首先获取验证码并保存Cookie&#xff0c;登陆时将Cookie和账号密码一同发送出去&#xff0c;返回状态码200&#xff0c;登陆成功&#xff0c;接下来再去访问其他需要登录权限的页面时附上Cookie发送出去即可。 要实现模拟登陆&#xff0c;首先需要了解登陆网站时请求中都包含什…