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

卢湾微信网站建设深圳高端seo外包公司

卢湾微信网站建设,深圳高端seo外包公司,500m主机空间能做视频网站吗,专门做电视剧截图的网站一.拦截器快速入门 1.1了解拦截器 什么是拦截器: 概念 :拦截器是Spring框架提供的核功能之, 主要来拦截的请求, 在指定法前后, 根据业务需要执预先设定的代码。 也就是说, 允许开发员提前预定义些逻辑, 在的请求响应前后执. 也可以在请求前阻其执. …

一.拦截器快速入门

1.1了解拦截器

什么是拦截器

概念 :拦截器是Spring框架提供的核功能之, 主要来拦截的请求, 在指定法前后, 根据业务需要执预先设定的代码。

也就是说, 允许开发员提前预定义些逻辑, 在的请求响应前后执. 也可以在请求前阻其执.

在拦截器当中,开发员可以在应程序中做些通性的操作, 如通过拦截器来拦截前端发来的请求, 判断Session中是否有登录的信息. 如果有就可以放, 如果没有就进拦截.

想象一下你去一个需要门禁的办公楼,拦截器就像是那个门禁系统。当你(请求)想要进入办公楼(访问某个资源)时,门禁系统(拦截器)会先检查你是否符合条件(比如是否持有有效的门禁卡或是否已经通过身份验证)。如果符合条件,门禁系统会放行,让你进入办公楼;如果不符合条件,门禁系统会阻止你进入,并可能要求你进行其他操作(比如登记或联系相关人员)。

在SpringBoot中,拦截器就是这样一种机制,它可以在请求到达控制器之前或之后“拦截”请求,并根据预定义的规则对请求进行处理。

拦截器在SpringBoot中主要有以下几个作用:

  1. 身份验证和权限控制
    • 就像门禁系统检查门禁卡一样,拦截器可以检查用户的身份验证状态和权限。例如,当用户尝试访问一个需要登录才能查看的页面时,拦截器会检查用户是否已经登录。如果用户未登录,拦截器可以重定向用户到登录页面或返回错误信息。
  2. 日志记录
    • 拦截器可以在请求到达控制器之前或之后记录日志信息。这对于监控和调试应用程序非常有用,因为它可以帮助你了解请求是如何被处理的,以及处理过程中发生了哪些事情。
  3. 请求预处理和响应后处理
    • 在请求到达控制器之前,拦截器可以对请求进行预处理,比如修改请求参数、设置请求头等。在控制器处理完请求并生成响应后,拦截器还可以对响应进行后处理,比如修改响应头、添加额外的数据到响应中等。
  4. 异常处理
    • 拦截器还可以捕获并处理请求处理过程中发生的异常。例如,如果控制器在处理请求时抛出了异常,拦截器可以捕获这个异常,并根据异常类型进行相应的处理,比如返回自定义的错误页面或错误信息。

1.2拦截器的基本使用

拦截器的使步骤分为两步:

  1. 定义拦截器
  2. 注册配置拦截器

1.定义拦截器:实现HandlerInterceptor接,并重写其所有法

@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler) throws Exception {log.info("LoginInterceptor ?标?法执?前执?..");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndView modelAndView) throws Exception {log.info("LoginInterceptor ?标?法执?后执?");}@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info("LoginInterceptor 视图渲染完毕后执?,最后执?");}
}
  • preHandle()法:标法执前执. 返回true: 继续执后续操作; 返回false: 中断后续操作.
  • postHandle()法:标法执后执
  • afterCompletion()法:视图渲染完毕后执,最后执(后端开发现在乎不涉及视图, 暂不了解)

2.注册配置拦截器:实现WebMvcConfigurer接,并重写addInterceptors法

@Configuration
public class WebConfig implements WebMvcConfigurer {//?定义的拦截器对象@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册?定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns("/**");//设置拦截器拦截的请求路径( /** 表?拦截所有请求)}
}

3.启动服务, 试试访问任意请求, 观察后端志

可以看到preHandle 法执之后就放了, 开始执标法, 标法执完成之后执

postHandleafterCompletion法.

4.我们把拦截器中preHandle法的返回值改为false, 再观察运结果

可以看到, 拦截器拦截了请求, 没有进响应.

1.2拦截器详解

拦截器的程序完成之后,接下来我们来介绍拦截器的使细节。拦截器的使细节我们主要介绍

两个部分:

  1. 拦截器的拦截路径配置
  2. 拦截器实现原理

拦截路径是指我们定义的这个拦截器, 对哪些请求效.

我们在注册配置拦截器的时候, 通过 addPathPatterns() 法指定要拦截哪些请求. 也可以通过

excludePathPatterns() 指定不拦截哪些请求.

上述代码中, 我们配置的是 /** , 表拦截所有的请求.

如登录校验, 我们希望可以对除了登录之外所有的路径效。

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {//?定义的拦截器对象@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册?定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/user/login");//设置拦截器拦截的请求路径(/** 表?拦截所有请求)}}

在拦截器中除了可以设置 /** 拦截所有资源外,还有些常拦截路径设置:

以上拦截规则可以拦截此项中的使 URL,包括静态件(图件, JS 和 CSS 等件)

1.3拦截器执行流程

正常的调顺序:

有了拦截器之后,会在调 Controller 之前进相应的业务处理,执的流程如下图

1.添加拦截器后, 执Controller的法之前, 请求会先被拦截器拦截住. 执 preHandle() 法,

这个法需要返回个布尔类型的值. 如果返回true, 就表放本次操作, 继续访问controller中的 法. 如果返回false,则不会放(controller中的法也不会执).

2.controller当中的法执完毕后,再回过来执 postHandle() 这个法以afterCompletion() 法,执完毕之后,最终给浏览器响应数据.

1.4登录校验

学习拦截器的基本操作之后,接下来我们需要完成最后步操作:通过拦截器来完成图书管理系统中的登录校验功能.

1.定义拦截器

从session中获取信息, 如果session中不存在, 则返回false,并设置http状态码为401, 否则返回true.

import com.example.demo.constant.Constants;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;
@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler) throws Exception {HttpSession session = request.getSession(false);if (session != null &&session.getAttribute(Constants.SESSION_USER_KEY) != null) {return true;}response.setStatus(401);return false;}
}

http状态码401: Unauthorized

Indicates that authentication is required and was either not provided or has failed. If the

request already included authorization credentials, then the 401 status code indicates that

those credentials were not accepted.

中解释: 未经过认证. 指份验证是必需的, 没有提供份验证或份验证失败. 如果请求已经包含授权凭据,那么401状态码表不接受这些凭据

2.注册配置拦截器

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {//?定义的拦截器对象@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册?定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns("/**")//设置拦截器拦截的请求路径(/**表?拦截所有请求).excludePathPatterns("/user/login")//设置拦截器排除拦截的路径.excludePathPatterns("/**/*.js") //排除前端静态资源.excludePathPatterns("/**/*.css").excludePathPatterns("/**/*.png").excludePathPatterns("/**/*.html");}
}

3.删除之前的登录校验代码

    @RequestMapping("/getListByPage")public Result getListByPage(PageRequest pageRequest, HttpSession session) {log.info("获取图书列表, pageRequest:{}", pageRequest);
// //判断??是否登录
// if (session.getAttribute(Constants.SESSION_USER_KEY)==null){
// return Result.unlogin();
// }
// UserInfo userInfo = (UserInfo) session.getAttribute(Constants.SESSION_USER_KEY);
// if (userInfo==null || userInfo.getId()<0 || "".equals(userInfo.getUserName())){
// return Result.unlogin();
// }//??登录, 返回图书列表PageResult<BookInfo> pageResult =bookService.getBookListByPage(pageRequest);log.info("获取图书列表222, pageRequest:{}", pageResult);return Result.success(pageResult);}

4运程序, 通过Postman进测试:

4.1查看图书列表

观察返回结果: h

也可以通过Fiddler抓包观察

4.2登录

4.3再次查看图书列表

数据进了返回

http://www.dtcms.com/wzjs/520139.html

相关文章:

  • 如何通过网站自己做网站南京seo建站
  • 受欢迎的邢台做网站怎样进行seo推广
  • wordpress積分系統正规优化公司哪家好
  • 软件开发分工5个角色深圳排名seo
  • 哪个网站建设热狗seo外包
  • 中国十大猎头公司杭州网站优化推荐
  • 标志空间网站口碑营销有哪些方式
  • 自己做的电影网站犯法吗百度广告推广费用
  • 深圳小蚁人网站建设郑州做网络营销渠道
  • 企业网站建设的基本原则有哪些?什么叫外链
  • 天津专业做网站又有什么新病毒出现了
  • 做医疗的网站公司注册流程
  • 保定门户网站网站百度收录查询
  • 做网站做得好的公司有长沙seo服务哪个公司好
  • 广西上林建设局网站线上销售方案
  • 全国做网站最好的公司有哪些市场推广seo职位描述
  • 武汉科技有限公司 网站建设网站推广计划方案
  • 做网站源码要给客户嘛中国培训网
  • 做权重网站人民日报新闻消息
  • mac 怎么下wordpressseo关键词优化排名推广
  • 一起做网店的类似网站最好用的搜索引擎
  • wordpress标签引用seo优化软件购买
  • 网站地图怎么做seo顾问培训
  • 长沙法律咨询网站设计开发seo网络推广培训班
  • 网络项目资源网站大学生网络营销策划书
  • 新郑整站优化武汉百度seo排名
  • 兰州网站建设100关键词搜索推广排行榜
  • 怎么用dw建设网站新人做外贸怎么找国外客户
  • app软件开发app定制开发价格成都抖音seo
  • 网站办理8元套餐google搜索