当前位置: 首页 > news >正文

建网站要什么工做人员重庆景点图片高清图片

建网站要什么工做人员,重庆景点图片高清图片,青羊网站建设,上海专业的网站建设公司在本文中#xff0c;我们将详细讲解Java设计模式中的责任链模式#xff0c;探讨其基本概念、使用场景、常见问题和解决方式。同时#xff0c;我们还会介绍责任链模式与策略模式的区别#xff0c;并结合电商交易系统的示例进行说明。此外#xff0c;我们还会探讨责任链模式…在本文中我们将详细讲解Java设计模式中的责任链模式探讨其基本概念、使用场景、常见问题和解决方式。同时我们还会介绍责任链模式与策略模式的区别并结合电商交易系统的示例进行说明。此外我们还会探讨责任链模式在开源框架中的应用。 1. 责任链模式概述 责任链模式是一种行为设计模式旨在将请求沿着链传递直到被某个处理器处理。它使得多个对象都有机会处理请求避免了请求发送者与接收者的耦合。 1.1 主要特点 请求传递请求沿着链条依次传递直到找到能够处理该请求的处理器。灵活性可以动态增加或删除处理器调整处理链的顺序。解耦请求发送者和处理者之间没有直接的依赖关系。 1.2 结构 责任链模式主要包括以下几个角色 Handler定义了处理请求的接口并包含了对下一个处理器的引用。ConcreteHandler具体的处理器类负责处理具体的请求。Client发出请求的客户端依赖于Handler接口。 2. 使用场景 请求需要多个对象进行处理例如在订单处理系统中不同的订单状态可能由不同的处理器进行处理。动态的请求处理链如审批流程处理链可以根据业务需求进行动态配置。 3. 电商交易系统中的示例 以电商交易系统为例我们将演示如何使用责任链模式来处理订单状态的变化。例如订单可能会经历“已支付”、“已发货”、“已收货”等状态每个状态的处理都可以看作是责任链中的一个环节。 3.1 错误示范 在没有使用责任链模式的情况下订单状态的处理可能会写成一长串的if-else语句这样的代码可读性差维护困难。 public class OrderService {public void processOrder(Order order) {if (order.getStatus().equals(PAID)) {// 处理已支付的订单} else if (order.getStatus().equals(SHIPPED)) {// 处理已发货的订单} else if (order.getStatus().equals(DELIVERED)) {// 处理已收货的订单}// 其他状态处理} }3.2 正确示范 使用责任链模式可以将不同状态的处理分离到各自的处理器中增强代码的灵活性和可维护性。 abstract class OrderHandler {protected OrderHandler nextHandler;public void setNextHandler(OrderHandler nextHandler) {this.nextHandler nextHandler;}public abstract void handleOrder(Order order); }class PaidOrderHandler extends OrderHandler {Overridepublic void handleOrder(Order order) {if (order.getStatus().equals(PAID)) {// 处理已支付的订单} else if (nextHandler ! null) {nextHandler.handleOrder(order);}} }class ShippedOrderHandler extends OrderHandler {Overridepublic void handleOrder(Order order) {if (order.getStatus().equals(SHIPPED)) {// 处理已发货的订单} else if (nextHandler ! null) {nextHandler.handleOrder(order);}} }class DeliveredOrderHandler extends OrderHandler {Overridepublic void handleOrder(Order order) {if (order.getStatus().equals(DELIVERED)) {// 处理已收货的订单} else if (nextHandler ! null) {nextHandler.handleOrder(order);}} }使用责任链模式后我们可以灵活地添加、删除或调整处理器顺序无需修改现有代码。 3.3 类图 4. 常见问题与解决方式 4.1 问题一责任链过长导致性能问题 在某些场景下责任链可能会变得过长导致每次请求传递的效率低下。 解决方式 优化链条顺序将最常用的处理器放在链条前面。分拆责任链将责任链拆分成多个子链分别处理不同的请求。 4.2 问题二处理器无法处理请求 当所有处理器都无法处理请求时可能会导致请求被忽略。 解决方式 添加默认处理器在链的末尾添加一个默认的处理器处理无法被处理的请求。 class DefaultOrderHandler extends OrderHandler {Overridepublic void handleOrder(Order order) {// 处理无法处理的请求} }5. 责任链模式与策略模式的区别 责任链模式与策略模式都是行为型模式但它们的使用场景和目的有所不同。 责任链模式关注请求的传递通过一系列的处理器逐个处理请求。适用于多个对象依次处理请求的场景。策略模式关注算法的替换通过定义一组算法类来实现相同的功能。适用于需要动态切换算法的场景。 6. 责任链模式在开源框架中的应用 责任链模式在许多开源框架中得到了广泛应用例如Spring Security中的过滤器链就是责任链模式的典型应用。 6.1 Spring Security过滤器链简介 Spring Security是一个为Java企业应用提供安全功能的框架。它的核心之一就是过滤器链用来对请求进行认证和授权。每个请求在进入应用程序之前都会经过一组过滤器。每个过滤器依次处理请求完成特定的安全检查任务如身份验证、权限检查、跨站点请求伪造CSRF防护等。 这些过滤器形成了一个“责任链”请求在链上一个一个过滤器中传递直到某个过滤器处理完毕或整个链处理结束。 Spring Security的过滤器链是基于Servlet API中的javax.servlet.Filter接口构建的。该接口的核心方法是doFilter()它接受请求和响应作为参数并负责将请求传递给链中的下一个过滤器。 6.2 责任链模式的应用结构 在责任链模式中通常会有以下几个角色 处理者Handler 定义一个处理请求的接口。每个具体的处理者实现该接口来处理部分请求。具体处理者Concrete Handler 处理链中实际的处理器处理请求或将请求传递给下一个处理者。客户Client 发起请求的对象不关心谁处理了请求也不需要知道具体的处理者。 在Spring Security中处理者相当于Filter而具体处理者是各种具体的安全过滤器如UsernamePasswordAuthenticationFilter、BasicAuthenticationFilter等。客户是HTTP请求。 6.3 Spring Security责任链模式工作流程 当客户端请求到达Spring Security的过滤器链时过滤器链按照顺序执行每一个过滤器直到某个过滤器决定阻止请求继续处理或最后一个过滤器处理完请求。 流程大致如下 客户端发起请求请求首先被交给第一个过滤器处理。过滤器链依次执行每个过滤器执行其doFilter()方法执行安全检查。请求传递如果当前过滤器无法处理请求或者处理完毕后仍需进一步检查则将请求传递给下一个过滤器。终止或继续若某个过滤器决定终止请求例如认证失败则直接返回响应不再执行后续过滤器否则继续传递请求。最后一个过滤器完成处理所有过滤器执行完毕后若没有过滤器拦截请求则请求到达目标资源。 6.4 案例自定义过滤器链 现在我们通过一个实际的案例演示如何在Spring Security中使用自定义过滤器链。假设我们需要在现有的Spring Security过滤器链中增加一个自定义的认证过滤器用来处理特殊的请求认证逻辑。 步骤1创建自定义过滤器 我们首先创建一个继承自OncePerRequestFilter的过滤器并在其中实现自定义的认证逻辑。 import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.filter.OncePerRequestFilter;import java.io.IOException;public class CustomAuthenticationFilter extends OncePerRequestFilter {Overrideprotected void doFilterInternal(HttpServletRequest request,HttpServletResponse response,FilterChain filterChain)throws ServletException, IOException {String token request.getHeader(Authorization);// 简单的认证逻辑如果存在token就通过认证if (token ! null token.startsWith(Bearer )) {// 模拟将用户信息存入SecurityContextSecurityContextHolder.getContext().setAuthentication(new CustomAuthenticationToken(token));}// 继续传递请求到下一个过滤器filterChain.doFilter(request, response);} }在这个过滤器中我们从HTTP请求的头部获取Authorization信息并检查它是否以Bearer 开头。如果符合条件就将认证信息存储在SecurityContextHolder中。之后调用filterChain.doFilter()将请求继续传递给下一个过滤器。 步骤2配置自定义过滤器链 接下来我们需要将自定义的过滤器加入到Spring Security的过滤器链中。通过扩展WebSecurityConfigurerAdapter并重写configure方法我们可以将自定义过滤器插入到合适的位置。 import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {Overrideprotected void configure(HttpSecurity http) throws Exception {http.addFilterBefore(new CustomAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class).authorizeRequests().anyRequest().authenticated();} }在此配置中我们使用了addFilterBefore()方法将自定义的CustomAuthenticationFilter添加到UsernamePasswordAuthenticationFilter之前。这样自定义过滤器将会在用户名密码认证过滤器之前执行。 步骤3测试过滤器链 至此过滤器链已经配置完成。我们可以通过HTTP请求来测试我们的过滤器链是否正常工作。 curl -H Authorization: Bearer abc123 http://localhost:8080/api/orders当客户端发送带有Authorization头的请求时自定义过滤器会处理认证逻辑随后将请求继续传递给下一个过滤器。如果认证通过Spring Security将允许访问资源否则将会返回未认证错误。 通过这种设计Spring Security可以灵活地配置过滤器的顺序和内容增强系统的可扩展性。 7. 总结 责任链模式在处理复杂的请求传递场景中非常有效尤其是在需要灵活调整处理顺序的系统中。通过本篇文章的介绍你应该已经掌握了责任链模式的基本概念、使用场景、常见问题以及如何在实际项目中应用它
http://www.ho-use.cn/article/10813753.html

相关文章:

  • 网站动画广告条怎么做的正版电子商务网
  • 做网站文案cco网站素材
  • 家用电脑可以做网站服务器wordpress全站静态页面
  • 网站建设51jyoowordpress阅读设置
  • 网站开发手把手阳泉集团网站建设
  • 网站备案 两个域名中职省级示范校建设网站
  • 用阿里云和大淘客做网站wordpress默认登录地址
  • 中国制造网外贸网站南京建设网站需要多少钱
  • 网站上传后 后台进不去企业科技网站建设
  • 深圳外贸网站制作自媒体wordpress主题
  • 游戏网站代理app网站设计制作
  • 景区网站建设的好处工信部网站查询
  • 中国建设网站的公司戴尔公司网站建设成功的关键是什么
  • 哪个网站可以做魔方图片大全宿州城乡建设局网站
  • 哈尔滨 做网站凡客诚品还经营吗
  • wordpress建的网站如何跟微信集成项目概述
  • 怎么制作网站来赚钱国外网站做网站主播
  • 网站推广的基本手段有哪些ui网页设计成都培训
  • php网站开发个人简历国内近期新闻热点大事件
  • 信息化设计公司排名厦门seo排名扣费
  • 设计制作商城网站html网页设计期末考试
  • 自学网站建设基本流程做网站公司怎么样
  • 网站建设报价选兴田德润毕业设计静态网站建设选题依据
  • 网站设计论文html中国最强十大私企
  • 电影网站建设费用广中路街道网站建设
  • 创造网站需要什么条件网站怎样维护
  • 让别人访问我的网站制作书签的作文
  • 网站开发制作费用网站制作公司兴田德润简介
  • 深圳网站建设主页泰州seo网络推广
  • 网站,商城,app 建设wordpress文章添加返回目录