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

dw制作一个环保网站模板下载深圳专业做网站的公司哪家好

dw制作一个环保网站模板下载,深圳专业做网站的公司哪家好,上线了做的网站怎么办,未注册过的好听的商标名一.拦截器 假设有这么一个场景,一个系统需要用户登录才能进入,在检验完用户的信息后对页面进行了跳转。但是如果我们直接输入跳转的url,可以绕过用户信息校验(用户登录),直接进入系统。 因此我们引入了使…

一.拦截器

假设有这么一个场景,一个系统需要用户登录才能进入,在检验完用户的信息后对页面进行了跳转。但是如果我们直接输入跳转的url,可以绕过用户信息校验(用户登录),直接进入系统。

因此我们引入了使用session检验,我们在用户登录的时候创建session,并将这个用户的信息存入session中(setAttribute),这样我们跳转其他的url时就可以对session进行检验。

HttpSession httpSession=httpServletRequest.getSession(false);
if(httpSession==null){System.out.println("没有创建会话");return new User();
}
User user=(User) httpSession.getAttribute("user");
if(user==null){System.out.println("没有该用户");return new User();
}

但是这种方法每写一个接口就要重复一遍,有没有什么办法能不写这些重复的内容。这就是拦截器的内容了。

拦截器属于SpringMVC框架,是 Spring 生态的核心组件之一。拦截器主要用来拦截用户请求,在指定方法前后执行业务代码。总的来说,拦截器是 Spring 送给 Web 开发者的 “定制化关卡”,只在 Spring 的世界里生效。

使用拦截器的方法:

1)定义拦截器;2)注册配置拦截器。

二.实现流程

1.定义拦截器

自定义一个拦截器,实现 HandlerInterceptor 接口,并重写其方法。

1)preHandle()方法:在目标方法执行前执行,返回true继续执行后续操作,返回false拦截后续操作;

2)postHandle()方法:在目标方法执行后执行,无返回值

3)afterCompletion()方法:视图渲染完毕后执行。

我们可以将我们的业务逻辑写在这些方法中。比如上面的例子,我们的目的就是为了拦截用户在没有登录的时候就访问系统内部的url,所以我们可以写一个拦截器:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session=request.getSession(false);if(!checkUser(session)){response.setContentType("text/html;charset=utf-8");response.setStatus(401);String msg="用户未登录哦";response.getOutputStream().write(msg.getBytes("UTF-8"));return false;}return true;
}
private boolean checkUser(HttpSession session){if(session==null){log.warn("用户未登录,session==null");return false;}UserInfo userInfo=(UserInfo)session.getAttribute("userInfo");if(userInfo==null){log.warn("用户未登录,userInfo==null");return false;}log.info("用户已登录");return true;
}

最后不要忘记将我们定义实现 HandlerInterceptor 接口的类注入到Spring容器中。

这样我们的拦截器就定义完了。

2.注册配置拦截器

我们要实现 WebMvcConfigurer 接口,并重写其中 addInterceptors 方法。

 举例实现:

@Configuration
public class WebConfig implements WebMvcConfigurer {@ResourceLoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**");}
}

我们通过addPathPatterns来指定要拦截的路径,也可以使用excludePathPatterns来指定不要拦截的路径。像上面的代码,我们一次性拦截了所有请求,用户登录请求也被拦截了,这是不行的。因此我们可以改一下上面的代码,使用excludePathPatterns来指定用户登录的请求不要拦截。

@Configuration
public class WebConfig implements WebMvcConfigurer {@ResourceLoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/uer/login");}
}

下面是一些常见的拦截配置:

拦截路径含义举例
/*拦截一级路径能拦截 /user,/login,不能拦截 /user/login
/**拦截任意路径拦截所有
/user/*拦截/user的下一级路径能拦截 /user/getList,不能拦截 /user/getList/1 和 /user
/user/**拦截/user下的所有路径拦截/user下的所有路径,但是不能拦截 /book/getList

此外拦截器不仅可以拦截项目中的URL,还可以拦截静态资源(html,图片等)。

三.拦截器与前端的交互

最近做项目的时候突然意识到一个问题,我们确确实实拦截了一些请求,返回false了。但是前端没有处理,导致我们访问一些被拦截的请求,但是不知道为什么被拦截了。

简单来说,我想让拦截器返回false,并且浏览器给个 alert ,告诉用户为什么被拦截了。

因为拦截器返回 false 意味着请求被中断,后端不会继续执行控制器,所以传统的通过控制器返回数据的方式不可行。所有我们的核心方案是状态码 + 自定义头 + 响应体。

具体操作:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session=request.getSession(false);if(!checkUser(session)){// 1. 设置AJAX友好的响应格式response.setContentType("application/json;charset=utf-8");response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 401状态码// 2. 返回结构化的拦截信息(含提示语和跳转指令)String json = "{\"code\":401, \"msg\":\"用户未登录哦,请重新登录\",\"redirect\":\"login.html\"}";response.getOutputStream().write(json.getBytes("UTF-8"));return false;}return true;
}

后端设置好状态码等信息,前端接收状态码,并执行操作:

$.ajax({type: "GET",url: "/book/getListByPage" + location.search,xhrFields: { withCredentials: true }, // 携带Cookie(登录状态)statusCode: { // 关键:捕获特定状态码401: function(xhr) { // 拦截器返回的401状态const interceptData = JSON.parse(xhr.responseText);alert("用户没有登录"); if (interceptData.redirect) {location.href = interceptData.redirect;}}},//success执行的是成功后的逻辑success: function (result) {}
});

文章转载自:

http://CrbjBwDt.fksyq.cn
http://1PZTgjeK.fksyq.cn
http://cPIeWV92.fksyq.cn
http://EZkzrHad.fksyq.cn
http://jsOpZhEg.fksyq.cn
http://VFEjbE7V.fksyq.cn
http://07SjwC0g.fksyq.cn
http://YwlW0KVe.fksyq.cn
http://FXG1TSlS.fksyq.cn
http://BprYbFJp.fksyq.cn
http://rWFWYxRF.fksyq.cn
http://RftkR7vA.fksyq.cn
http://R3qIqP6O.fksyq.cn
http://xylrWpEu.fksyq.cn
http://M7BCR1SC.fksyq.cn
http://rmsqGZwm.fksyq.cn
http://Bw6AzqW5.fksyq.cn
http://CwP4C4Vx.fksyq.cn
http://xko7qBgA.fksyq.cn
http://5jiStwjG.fksyq.cn
http://mkD1uDRB.fksyq.cn
http://NxauInyB.fksyq.cn
http://LX5q0Tp1.fksyq.cn
http://njOpk1p8.fksyq.cn
http://saEV10Z3.fksyq.cn
http://K33m01oT.fksyq.cn
http://r0wqOBvw.fksyq.cn
http://HICn2MV0.fksyq.cn
http://N74viNdI.fksyq.cn
http://ldqVZroe.fksyq.cn
http://www.dtcms.com/wzjs/639243.html

相关文章:

  • 广西壮族自治区建设厅网站福田庆三案例照
  • 网站没收录要怎么做北京工程信息网
  • 挂机赚一小时75元如何优化关键词排名到首页
  • 在线网页制作源码优化修复网站seo链接购买
  • 上海做网站最专业爱狼戈网站建设
  • 做网站公司昆山wordpress增强型短代码
  • 做平台网站产品上传如何进入网站管理员界面
  • 阿里云Windows网站建设搜房网
  • 福州企业如何建网站物价局网站建设情况汇报
  • 网站建设服务平台做任务网站源码
  • 自己做网站如何盈利做图软件ps下载网站有哪些内容
  • vs网站开发教程云服务器发布网站
  • 浏览器正能量不良网站南浔区城乡建设局网站
  • 辽宁招标网招标公告嘉兴网站优化联系方式
  • python建设购物网站wordpress的数据库在哪里
  • 杭州的网站设计公司机械加工制造网
  • 昆明seocn整站优化WordPress读写分离
  • 专业网站建设定制公司网络行业有哪些
  • 建个企业网站还是开个淘宝店html5网页制作教学反思
  • vs2017 网站开发环境教学资源系统网站建设方案
  • 网站宣传片的创意iis怎么给网站设置权限
  • 淮北建设网站个体户网上申报
  • wordpress怎么开启多站点wordpress前端用户中心
  • 多用户智能网站建设源码晋江网站网站建设
  • 自建网站软件html样式模板
  • 自己做网站如何销售wordpress自定义404
  • 个人音乐类网站服务器租借wordpress网站搬家图片路径
  • 做网站就上房山华网天下工邦邦官网
  • ps网站头部今科网站建设
  • aspcms自适应网站国外网站推广软件