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

中小型企业网站选择什么配置的亚马逊服务器抖音代运营报价单(仅供参考)

中小型企业网站选择什么配置的亚马逊服务器,抖音代运营报价单(仅供参考),废旧物品手工制作图片,固定ip如何做网站服务器目录 用户登录权限校验用户登录拦截器排除所有静态资源练习:登录拦截器拦截器实现原理 统一异常处理统一数据返回格式为什么需要统⼀数据返回格式?统⼀数据返回格式的实现 用户登录权限校验 用户登录拦截器 1.自定义拦截器 package com.example.demo.…

目录

  • 用户登录权限校验
    • 用户登录拦截器
    • 排除所有静态资源
    • 练习:登录拦截器
    • 拦截器实现原理
  • 统一异常处理
  • 统一数据返回格式
    • 为什么需要统⼀数据返回格式?
    • 统⼀数据返回格式的实现

用户登录权限校验

用户登录拦截器

1.自定义拦截器

package com.example.demo.config;import com.example.demo.common.AppVar;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** 自定义拦截器*/@Component
public class UserInterceptor implements HandlerInterceptor {/*** 返回 true -> 拦截器验证成功,继续执行后续方法* false -> 拦截器验证失败,不会执行后续的目标方法** @param request* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {// 业务方法HttpSession session = request.getSession(false);if (session != null &&session.getAttribute(AppVar.SESSION_KEY) != null) {// 用户已经登录return true;}return false;}
}

在这里插入图片描述
2.将自定义拦截器配置到系统设置中,并设置拦截规则

package com.example.demo.config;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 AppConfig implements WebMvcConfigurer {@Autowiredprivate UserInterceptor userInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new UserInterceptor());registry.addInterceptor(userInterceptor).addPathPatterns("/**") // 拦截所有请求.excludePathPatterns("/user/reg").excludePathPatterns("/user/login");}
}

排除所有静态资源

// 拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") // 拦截所有接⼝.excludePathPatterns("/**/*.js").excludePathPatterns("/**/*.css").excludePathPatterns("/**/*.jpg").excludePathPatterns("/login.html").excludePathPatterns("/**/login"); // 排除接⼝
}

练习:登录拦截器

  1. 登录、注册⻚⾯不拦截,其他⻚⾯都拦截。
  2. 当登录成功写⼊ session 之后,拦截的⻚⾯可正常访问。
package com.example.demo.config;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 AppConfig implements WebMvcConfigurer {@Autowiredprivate UserInterceptor userInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new UserInterceptor());registry.addInterceptor(userInterceptor).addPathPatterns("/**") // 拦截所有请求.excludePathPatterns("/user/reg").excludePathPatterns("/reg.html").excludePathPatterns("/login.html").excludePathPatterns("/css/**").excludePathPatterns("/editor.md/**").excludePathPatterns("/img/**").excludePathPatterns("/js/**");}
}
package com.example.demo.config;import com.example.demo.common.AppVar;
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;/*** 自定义拦截器*/
@Component
public class UserInterceptor implements HandlerInterceptor {/*** 返回 true -> 拦截器验证成功,继续执行后续方法* false -> 拦截器验证失败,不会执行后续的目标方法** @param request* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {System.out.println("do UserInterceptor");// 业务方法HttpSession session = request.getSession(false);if (session != null &&session.getAttribute(AppVar.SESSION_KEY) != null) {// 用户已经登录return true;}response.sendRedirect("https://www.baidu.com");return false;}
}

拦截器实现原理

在这里插入图片描述
然⽽有了拦截器之后,会在调⽤ Controller 之前进⾏相应的业务处理,执⾏的流程如下图所示:
在这里插入图片描述

统一异常处理

统⼀异常处理使⽤的是 @ControllerAdvice + @ExceptionHandler 来实现的,@ControllerAdvice 表示控制器通知类,@ExceptionHandler 是异常处理器,两个结合表示当出现异常的时候执⾏某个通知,也就是执⾏某个⽅法事件。

1.@ControllerAdvice/@RestControllerAdvice
2.@ExceptionHandler(Exception.class)统一返回的对象

package com.example.demo.config;import com.example.demo.common.ResultAjax;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvice
public class ExceptionAdvice {@ExceptionHandler(NullPointerException.class)public ResultAjax doNullPointerException(NullPointerException e) {ResultAjax resultAjax = new ResultAjax();resultAjax.setCode(-1);resultAjax.setMsg("空指针异常:"+ e.getMessage());resultAjax.setData(null);return resultAjax;}@ExceptionHandler(Exception.class)public ResultAjax doException(Exception e) {ResultAjax resultAjax = new ResultAjax();resultAjax.setCode(-1);resultAjax.setMsg("异常:"+ e.getMessage());resultAjax.setData(null);return resultAjax;}
}

统一数据返回格式

为什么需要统⼀数据返回格式?

统⼀数据返回格式的优点有很多,⽐如以下⼏个:

  1. ⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据。
  2. 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就⾏了,因为所有接⼝都是这样返回
    的。
  3. 有利于项⽬统⼀数据的维护和修改。
  4. 有利于后端技术部⻔的统⼀规范的标准制定,不会出现稀奇古怪的返回内容。

统⼀数据返回格式的实现

统⼀的数据返回格式可以使⽤ @ControllerAdvice + ResponseBodyAdvice 的⽅式实现。

  1. @ControllerAdvice
  2. 实现ResponseBodyAdvice接口,并重写它的两个方法:supports方法必须返回true,beforeBodyWrit方法中进行重新判断和重写操作。
package com.example.demo.config;import com.example.demo.common.ResultAjax;
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;/*** 统一返回值的保底实现类*/
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {/*** true -> 才会调用 beforeBodyWrite 方法,* 反之则永远不会调用* @param returnType* @param converterType* @return*/@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 已经包装好的对象if (body instanceof ResultAjax) {return body;}return ResultAjax.succ(body);}
}
http://www.yayakq.cn/news/563673/

相关文章:

  • 地方性手机平台微网站百度搜索这个网站为什么这么差
  • 语文建设编辑部官方网站软件站
  • 百度网站 收录高端网站建设哪些好
  • 网站刷链接怎么做沈阳工程建设监理咨询
  • 中国十大搜索引擎网站海宁高端高端网站设计
  • 建设银行武威分行网站购物网站开发介绍
  • 如何做360购物网站德州网站建设的公司
  • 宝洁公司网站建设案例wordpress使用缩略图
  • 祥云平台 网站建设企业管理系统设计
  • 怎么在网站视频做字幕wordpress文章自动分类
  • 厦门网站建设找哪家比较好百度百家号怎么赚钱
  • 做网站策划薪酬网站用cms
  • 哪个网站有适合小学生做的题目网站建设方案范文2000字
  • 法语网站建站公司养生网站设计
  • 山西中交建设工程招标有限公司网站深圳seo优化服务
  • 嘉兴企业网站建设推广网站开发图片框
  • 制作小程序网站源码无锡定制网站
  • 手机网站后台网站悬浮二维码
  • 站长工具2023最新国产iis ip访问网站
  • 广西网站制作海拉尔网站设计
  • 网站建设管理昆山市建设监察大队网站
  • 做网站要学会什么语言手机上传视频网站开发
  • 兰亭集势的网站平台建设怎么制作微信小程序游戏
  • 网站站长需要具备什么素质天津网站建设 泰姆仕
  • 广东建设厅的网站查询中国建设银行国际互联网网站
  • 电子商务网站建设方案书建站源码下载
  • wordpress开通多站点好处海淀搜索引擎优化seo
  • 校园网站制作模板网站建站平台开发服务服务采购公告
  • 西安分类信息网站下载站源码cms
  • python做视频点播网站房屋装修设计师培训