分成型网站建设大连市建设工程招标网

张小明 2026/1/10 1:14:53
分成型网站建设,大连市建设工程招标网,网站建设合同印花税,大连高新园区教育局拦截器定义拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执 ⾏预先设定的代码.实现拦截器1. 定义拦截器创建类#xff0c;实现HandlerInterceptor接口#xff0c;重写preHandle和postHandle两个方法#xff0c;在方法中实现…拦截器定义拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执 ⾏预先设定的代码.实现拦截器1. 定义拦截器创建类实现HandlerInterceptor接口重写preHandle和postHandle两个方法在方法中实现拦截器逻辑其中preHandle方法是在controller类之前进行用于检查postHandle是controller实现完成后或者拦截成功后逆序进行用于收尾。实现流程假设拦截器有三个功能情况一放行调用preHandle方法实现功能123如果放行则调用controller方法完成后调用postHandle方法实现功能321情况二拦截调用preHandle方法实现功能123在第3个功能处拦截随后跳过controller方法调用postHandle方法只实现功能21。因为3并没有在preHandle实现。package com.spring.bookmanage.interceptor; import com.spring.bookmanage.constant.Constants; import com.spring.bookmanage.entity.Result; import com.spring.bookmanage.entity.UserInfo; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; Slf4j Component public class LoginInterceptor implements HandlerInterceptor{ Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info(目标代码执行前); HttpSession session request.getSession(false); if(!checkStatus(session)){ response.setStatus(401); return false; } //true放行false拦截 return true; } Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info(目标方法执行后); } Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info(完成后); } public boolean checkStatus(HttpSession session) { if(sessionnull||(session.getAttribute(Constants.SESSION_USER_INFO)null)){ //用户未登录 return false; } UserInfo userInfo(UserInfo)session.getAttribute(Constants.SESSION_USER_INFO); if ((userInfonull)||(userInfo.getId()0)){ //用户未登录 return false; } return true; } }2. 注册拦截器创建类实现WebMvcConfigurer接口实例化LoginInterceptor类并重写addInterceptors⽅法方法中定义拦截路径/book/**package com.spring.bookmanage.config; import com.spring.bookmanage.interceptor.LoginInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; Configuration public class WebConfig implements WebMvcConfigurer { Autowired private LoginInterceptor loginInterceptor; Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor).addPathPatterns(/book/**); } }通过打印日志可以看到拦截器生效红框标出拦截路径Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor) .addPathPatterns(/**) .excludePathPatterns(/user/login);//设置拦截器拦截的请求路径 (/** 表⽰拦截所有请求) }统一数据返回格式该功能将统一格式返回前端实现创建类实现ResponseBodyAdvice接口重写supports和beforeBodyWrite方法。supports方法: 判断是否要执行beforeBodyWrite方法. true为执行, false不执行. 通过该方法可以选择哪些类或哪些方法的response要进行处理, 其他的不进行处理.beforeBodyWrite方法: 对response方法进行具体操作处理package com.spring.bookmanage.config; import com.spring.bookmanage.entity.BookInfo; import com.spring.bookmanage.entity.Result; import lombok.SneakyThrows; import org.jspecify.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import tools.jackson.databind.ObjectMapper; ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice { Autowired private ObjectMapper objectMapper; Override public boolean supports(MethodParameter returnType, Class converterType) { //false:不处理 true:处理 return true; } SneakyThrows Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if(body instanceof String){ return objectMapper.writeValueAsString(Result.success(body)); } if(body instanceof Result){ return body; } return Result.success(body); } }统⼀异常处理统⼀异常处理使用的是 ControllerAdvice ExceptionHandler 来实现的, ControllerAdvice 表⽰控制器通知类ExceptionHandler 是异常处理器两个结合表示当出现异常的时候执行某个通知也就是执行某个方法事件package com.spring.bookmanage.config; import com.spring.bookmanage.entity.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; Slf4j ControllerAdvice ResponseBody public class ExceptionAdvice { ExceptionHandler public Result handler(Exception e){ log.error(error: e); return Result.fail(inner error); } }三组件及Controller背后的调度者DispatcherServlet我们看看Spring是怎么实现的, 还是从 DispatcherServlet 的代码开始分析。DispatcherServlet 对象在创建时会初始化一系列的对象源码过于复杂笔者作为和各位读者同样甚至更加稚嫩的初学者就不大量展示了以下为一小部分DispatcherServlet源码public class DispatcherServlet extends FrameworkServlet { //... protected void initStrategies(ApplicationContext context) { initMultipartResolver(context); initLocaleResolver(context); initThemeResolver(context); initHandlerMappings(context); //url-方法映射 initHandlerAdapters(context); //适配器可理解为统一接口格式工具 initHandlerExceptionResolvers(context); //异常处理器 initRequestToViewNameTranslator(context); initViewResolvers(context); initFlashMapManager(context); } //...springboot启动时由Servlet容器在80端口默认监听并且DispatchServlet类启动初始化这九大对象其中就包括url-方法映射这就是我们的controller适配器异常处理机制等。当请求某个方法DispatcherServlet调用拦截器对请求进行检验如果没有问题则放行如果有问题则直接跳过controller调用当请求被拦截器放行DispatcherServlet查找所有Controller方法找到对应的请求路径的方法调用当返回某个结果DispatcherServlet查找所有结果统一格式方法调用并封装结果返回当出现异常DispatcherServlet查找所有异常处理找到合适的异常处理方法并调用。总结本章节主要介绍了SpringBoot 对⼀些统⼀功能的处理⽀持.1. 拦截器的实现主要分两部分: 定义拦截器(实现HandlerInterceptor 接口) 配置拦截器2. 统⼀数据返回格式通过ControllerAdvice ResponseBodyAdvice 来实现3. 统⼀异常处理使⽤ControllerAdvice ExceptionHandler 来实现, 并且可以分异常来处理4. 学习了DispatcherServlet的一点点源码
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

server 2008 iis部署网站做网站有那几种末班

FaceFusion支持多语种字幕嵌入视频流:技术解析与应用实践在一场面向全球观众的电商直播中,一位中国主播正热情地介绍新款智能手表。弹幕飞速滚动,来自日本、德国和巴西的用户却皱起了眉头——语言成了他们理解产品亮点的最大障碍。如果此时画…

张小明 2026/1/10 1:12:50 网站建设

如何设计网站制作方案网站百度建设

缓存架构性能优化终极指南:从核心原理到实战应用 【免费下载链接】system-design-101 使用视觉和简单的术语解释复杂系统。帮助你准备系统设计面试。 项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-101 在当今高并发系统中,缓…

张小明 2026/1/10 1:10:49 网站建设

织梦免费机械网站源码怎么做qq分享网站

目录已开发项目效果实现截图开发技术系统开发工具:核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式&…

张小明 2026/1/10 1:08:45 网站建设

wordpress小说站模版12306 网站谁做的

第一章:Symfony 8路由优化的核心价值在现代Web应用开发中,路由系统不仅是请求分发的入口,更是影响性能与可维护性的关键组件。Symfony 8通过重构其路由机制,在匹配效率、缓存策略和配置灵活性方面实现了显著提升,为高并…

张小明 2026/1/10 1:06:44 网站建设

网站建设的平台微信小程序vr全景

对前端开发者而言,学习算法绝非为了“炫技”。它是你从“页面构建者”迈向“复杂系统设计者”的关键阶梯。它将你的编码能力从“实现功能”提升到“设计优雅、高效解决方案”的层面。从现在开始,每天投入一小段时间,结合前端场景去理解和练习…

张小明 2026/1/10 1:04:40 网站建设

手机网站建设制作教程视频做招聘网站

一、技术栈优势:UNIAPPPHP,高性能私域运营系统1. UNIAPP前端:一套代码,多端覆盖核心优势:跨平台兼容:一套代码适配微信小程序、H5、App(iOS/Android),降低开发成本组件化…

张小明 2026/1/10 1:02:36 网站建设