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

空间租用 网站开发网站降权怎么救

空间租用 网站开发,网站降权怎么救,免费解析网站,电脑编程学校哪家好主要是三个处理#xff1a; 1、统一用户登录权限验证#xff1b; 2、统一异常处理#xff1b; 3、统一数据格式返回。 目录 一、用户登录权限校验 #x1f345; 1、使用拦截器 #x1f388; 1.1自定义拦截器 #x1f388; 1.2 设置自定义拦截器 #x1f388;创建cont… 主要是三个处理         1、统一用户登录权限验证         2、统一异常处理         3、统一数据格式返回。 目录 一、用户登录权限校验 1、使用拦截器 1.1自定义拦截器 1.2 设置自定义拦截器 创建controller类并且运行项目 2、拦截器原理 二、统一异常处理 三、统一数据返回 为什么需要统一数据返回格式 统一数据返回格式 定义同已返回类型 同以数据处理 业务类 一、用户登录权限校验 1、使用拦截器 可以对一部分方法进行拦截而另一部分不拦截。 1.1自定义拦截器 /* * 全局变量 * */ public class AppVar { // Session keypublic static final String SESSION_KEY SESSION KEY; }/* * 自定义拦截器 * 返回true - 表示拦截器验证成功继续指定后续方法 * 返回false - 表示验证失败不会执行后续的方法了 * */ Component public class UserInterceptor implements HandlerInterceptor {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;} } 1.2 设置自定义拦截器 将自定义拦截器设置当前项目的配置文件中并且设置拦截规则。 拦截器要注入到Spring中才能运行他是伴随着Spring的启动而启动的 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)//表示过滤拦截不拦截(/user/reg).excludePathPatterns(/user/login);//表示过滤拦截不拦截(/user/login)} } 创建controller类并且运行项目 RestController RequestMapping(/user) public class UserController {RequestMapping(/getuser)public String getUser(){System.out.println(do getUser());return user;}RequestMapping(/reg)public String reg(){System.out.println(do reg());return reg;}RequestMapping(/login)public String login(){System.out.println(do login());return login;} }其中 addPathPatterns表示要拦截的url“/**”表示拦截任意方法elcludePathPatterns表示需要排除的URL以上得拦截规则可以拦截URL包括静态文件图片文件、JS、CSS等一般拦截静态文件的时候我们可以把这些静态文件分类放在static文件中 2、拦截器原理 在使用拦截器之前   使用拦截器之后会在调用Controller之前进行相应的业务处理 实现原理源码分析 所有的controller指定都会通过一个调度器DispatcherServlet来实现 所有的请求都会执行DispatcherServlet中的doDispatcher方法在doDispatcher会执行一系列的事件该事件是在执行拦截器之前的如果该事件返回false后续就不会执行Controller。 以下是doDispatcher中的一部分代码发现在执行controller之前都会追先执行预处理 // 调⽤预处理【重点】if (!mappedHandler.applyPreHandle(processedRequest, respon se)) {return;}// 执⾏ Controller 中的业务mv ha.handle(processedRequest, response, mappedHandler.g etHandler());if (asyncManager.isConcurrentHandlingStarted()) {return; } 那么关于预处理⽅法 applyPreHandle方法从上面的源码可以看出着和我们之前定义的拦截器相似着就是拦截器的实现原理 boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {for(int i 0; i this.interceptorList.size(); this.interceptorIndex i) {// 获取项⽬中使⽤的拦截器 HandlerInterceptorHandlerInterceptor interceptor (HandlerInterceptor)this.interceptorList.get(i);if (!interceptor.preHandle(request, response, this.handler)) {this.triggerAfterCompletion(request, response, (Exception)null);return false;}}return true;} 二、统一异常处理 统一异常处理就是指常规的异常统一处理。 统一异常处理使用的是ControllerAdvice ExceptionHandler来执行的ControllerAdvice表示控制器通知类ExceptionHandler是异常处理两个结合表示当出现异常的时候执行某个通知也就是执行某个方法事件。 首先认为构造一个空指针异常 RequestMapping(/reg)public String reg(){System.out.println(do reg());Object obj null;System.out.println(obj.hashCode());System.out.println();System.out.println(do reg());return reg;} 报错了 这种直接给你报错的方式并不直观所以我们可以进行统一的异常处理返回直观的数据。 然后我们进行统一异常处理 首先定义一个统一的返回对象 Data public class ResultAjax {private int code; //状态码private String msg; //状态码的描述信息private Object data;//返回数据 } 然后定义异常管理器 RestControllerAdvice public class ExceptionAdvice {ExceptionHandler(NullPointerException.class)public ResultAjax doNullPointerException(NullPointerException e){ResultAjax resultAjax new ResultAjax();//错误的信息使用-1描述状态码resultAjax.setCode(-1);resultAjax.setMsg(空指针异常 e.getMessage());resultAjax.setData(null);return resultAjax;} } 这时候就会返回状态的描述信息 也可以直接使用NullPointerException的父类 ExceptionHandler(Exception.class)public ResultAjax doException(Exception e){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(-1);resultAjax.setMsg(空指针异常 e.getMessage());resultAjax.setData(null);return resultAjax;} 三、统一数据返回 为什么需要统一数据返回格式 统一数据返回格式的优点为什么要统一 方便程序员更好的接收和解析后端数据接口返回的数据降低前端程序源和后端程序员的沟通成本按照找某个格式实现所有接口都这样返回有利于项目统一数据的维护和修改有利于后端技术部分的统一规范的标准制定不会出现稀奇古怪的返回内容 统一数据返回格式 定义同已返回类型 Data public class ResultAjax {private int code; //状态码private String msg; //状态码的描述信息private Object data;//返回数据/** 返回成功* */public static ResultAjax success(Object data){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(200);resultAjax.setMsg();resultAjax.setData(data);return resultAjax;}/** 返回失败* */public static ResultAjax fail(int code,String msg){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(code);resultAjax.setMsg(msg);resultAjax.setData(null);return resultAjax;}public static ResultAjax fail(int code,String msg,Object data){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(code);resultAjax.setMsg(msg);resultAjax.setData(null);return resultAjax;} } 同以数据处理 统一数据处理强制执行 ControllerAdvice实现ResponseBodyAdvice接口并且重写它其中的两个方法supports必须返回truebeforeBodyWrite方法进行重新判断和重写操作 ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {/** 默认翻会true的时候* 才会执行beforeBodyWrite方法* */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.success(body);} } 业务类 RestController RequestMapping(/user) public class UserController { RequestMapping(/login)public ResultAjax login(){System.out.println(do login());return ResultAjax.success(login);}RequestMapping(/getnum)public int getNum(){return 1;} } 其中login没有定义返回类型getNum定义了返回类型返回结果分别如下 注意         如果定义的返回值类型是String那么会报错 RequestMapping(/getstring)public String getString(){return qqq;} 那么可以对String类型作出单独处理 Autowiredprivate ObjectMapper objectMapper;Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType,Class selectedConverterType,ServerHttpRequest request,ServerHttpResponse response) {//已经包装好的对象if (body instanceof ResultAjax){return body;} // 对字符串进行单独处理if (body instanceof String){ResultAjax resultAjax ResultAjax.success(body);try {return objectMapper.writeValueAsString(resultAjax);} catch (JsonProcessingException e) {e.printStackTrace();}} // 没有包装return ResultAjax.success(body);} 返回结果
http://www.w-s-a.com/news/677661/

相关文章:

  • 集团公司网站开发asp网站怎么运行
  • 广州短视频网站开发东莞市建设信息网
  • 建设网站如果赚钱电脑可以做服务器部署网站吗
  • 网站建设的编程专门做面包和蛋糕的网站
  • 档案网站建设比较分析南京建站公司
  • 哪个网站可以做店招傻瓜式wordpress
  • 网站开发项目经理职责青岛模版网站建设
  • 企业建站哪个好网站建设所用程序
  • 网站建设seo视频定制图片软件
  • 404错误直接转向到网站首页四川省建筑施工企业人员考试平台
  • 手表电商网站智能展厅
  • 南海网站推广梅州做网站公司
  • 昆明专业网站建设公司成都外贸网站建设费用
  • php mysql网站开发项目公司网站宣传设计
  • 自己做网站服务器的备案方法怎么查网站点击量
  • 信息产业部icp备案中心网站织梦做双语网站
  • 爱站网站长seo综合查询工具局网站信息内容建设 自查报告
  • 我想建一个网站怎么建淄博网站推广那家好
  • 做网站和app需要多久河南自助建站建设代理
  • 大连做企业网站的公司宣传平台有哪些类型
  • 如何用微信做网站免费设计logo网站有哪些
  • 服务平台型网站余姚网站定制
  • 网站搭建联系方式太平阳电脑网网站模板
  • 请简述网站制作流程html5网络公司网站模板
  • 海尔集团企业网站建设分析重庆市建设银行网站
  • 介绍公司的网站有哪些广西壮族自治区
  • 网站做rss wordpress9 1短视频安装软件
  • 网站建设价格西安室内设计网站排行榜前十名知乎
  • 用nas建设服务器网站用vs做音乐网站
  • 天津市武清区住房建设网站网站自适应框架