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

做网站赚取广告费哪些网站做企业招聘不要花钱

做网站赚取广告费,哪些网站做企业招聘不要花钱,广东省建站公司,wordpress自定义菜单插件我们要实现以下3个目标#xff1a; 统一用户登录权限统一数据格式返回统一异常处理 1.用户的登录权限校验 1.1Spring AOP用户统一登录验证问题 Aspect Component public class UserAspect {// 定义切点controller包下、子孙包下所有类的所有方法Pointcut(execution(…我们要实现以下3个目标 统一用户登录权限统一数据格式返回统一异常处理 1.用户的登录权限校验 1.1Spring AOP用户统一登录验证问题 Aspect Component public class UserAspect {// 定义切点controller包下、子孙包下所有类的所有方法Pointcut(execution(* com.example.demo.controller..*.*(..)))public void pointcut(){}//前置方法Before(pointcut())public void doBefore() {System.out.println(Before开始执行);}//环绕方法Around(pointcut())public Object doAround(ProceedingJoinPoint joinPoint) {Object obj null;System.out.println(Around方法开始执行);try {objjoinPoint.proceed();} catch (Throwable e) {e.printStackTrace();}System.out.println(Around方法执行结束);return obj;}}在以上Spring AOP的切面中实现用户登录权限校验的功能有以下几个问题 没办法获取到HttpSession对象我们要对一部分方法进行拦截而另一部分方法不拦截我们是很难定义的。 1.3Spring拦截器 对于以上问题Spring中提供了具体的实现拦截器HandlerInterceptor拦截器的实现分为以下连两个步骤 创建自定义拦截器实现HandlerInterceptor接口的preHandle方法执行具体方法之前预处理自定义拦截器加入WebMvcConfigurer的addInterceptors方法中 1.3.1自定义拦截器 public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {HttpSession session request.getSession(false);if(session ! null session.getAttribute(userinfo) ! null) {return true;}response.setStatus(401);return false;} } 1.3.2将自定义拦截器加入到系统配置 Configuration public class AppConfig implements WebMvcConfigurer {//添加拦截器Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**) //拦截所有接口.excludePathPatterns(/art/param11); //排除一些接口} } addPathPatterns表示需要拦截的URL**表示拦截任意方法excludePathPatterns表示需要排除的URL 说明以上拦截规则可以拦截此项目中使用的URL包括静态文件 排除所有的静态资源 Configuration public class AppConfig implements WebMvcConfigurer {//添加拦截器Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**) //拦截所有接口.excludePathPatterns(/art/param11) //排除一些接口.excludePathPatterns(/**/*.js).excludePathPatterns(/**/*.css).excludePathPatterns(/**/*.jpg).excludePathPatterns(login.html).excludePathPatterns(/**/login); } }1.4拦截器实现原理 有了拦截器之后执行流程如下图所示 1.4.1实现源代码分析 所有的Controller执行都会通过一个调度器DispatcherServlet来实现这一点可以从Spring Boot控制台的打印信息看出来如下图所示(我们必须触发拦截功能 而所有的方法都会执行DispatcherServlet中doDispatch调度方法doDispatch源码如下 protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {HttpServletRequest processedRequest request;HandlerExecutionChain mappedHandler null;boolean multipartRequestParsed false;WebAsyncManager asyncManager WebAsyncUtils.getAsyncManager(request);try {try {ModelAndView mv null;Object dispatchException null;try {processedRequest this.checkMultipart(request);multipartRequestParsed processedRequest ! request;mappedHandler this.getHandler(processedRequest);if (mappedHandler null) {this.noHandlerFound(processedRequest, response);return;}HandlerAdapter ha this.getHandlerAdapter(mappedHandler.getHandler());String method request.getMethod();boolean isGet HttpMethod.GET.matches(method);if (isGet || HttpMethod.HEAD.matches(method)) {long lastModified ha.getLastModified(request, mappedHandler.getHandler());if ((new ServletWebRequest(request, response)).checkNotModified(lastModified) isGet) {return;}}if (!mappedHandler.applyPreHandle(processedRequest, response)) {return;}mv ha.handle(processedRequest, response, mappedHandler.getHandler());if (asyncManager.isConcurrentHandlingStarted()) {return;}this.applyDefaultViewName(processedRequest, mv);mappedHandler.applyPostHandle(processedRequest, response, mv);} catch (Exception var20) {dispatchException var20;} catch (Throwable var21) {dispatchException new NestedServletException(Handler dispatch failed, var21);}this.processDispatchResult(processedRequest, response, mappedHandler, mv, (Exception)dispatchException);} catch (Exception var22) {this.triggerAfterCompletion(processedRequest, response, mappedHandler, var22);} catch (Throwable var23) {this.triggerAfterCompletion(processedRequest, response, mappedHandler, new NestedServletException(Handler processing failed, var23));}} finally {if (asyncManager.isConcurrentHandlingStarted()) {if (mappedHandler ! null) {mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);}} else if (multipartRequestParsed) {this.cleanupMultipart(processedRequest);}}} 我们发现在开始执行Controller之前会先调用预处理方法applyPreHandle而这个方法就是获取实现HandlerInterceptor接口的所有所有类并调用preHandler方法。 2.统一异常处理 统一异常处理使用的是ControllerAdvice ExceptionHandler来实现的ControllerAdvice表示控制器通知类ExceptionHandler是异常处理器两个结合表示当出现异常的时候执行某个通知也就是执行了某个方法事件具体代码实现如下 ControllerAdvice public class ErrorAdive {ExceptionHandler(Exception.class) ResponseBodypublic Object handler(Exception e) {HashMapString, Object map new HashMap();map.put(state, 0);map.put(data, null);map.put(msg, e.getMessage());return map;} } PS方法名和返回值可以自定义重要的是ControllerAdvice和ExceptionHandler() 我们可以针对不同的异常设置不同的注解这将返回不同的结果。 ControllerAdvice public class ErrorAdive {ExceptionHandler(Exception.class)ResponseBodypublic Object handler(Exception e) {HashMapString, Object map new HashMap();map.put(state, 0);map.put(data, null);map.put(msg, e.getMessage());return map;}ExceptionHandler(NullPointerException.class)ResponseBodypublic Object nullPointerExceptionAdvice(NullPointerException e) {HashMapString, Object ret new HashMap();ret.put(state, 0);ret.put(msg, 空指针异常);ret.put(data, null);return ret;}} 当有多个异常通知的时候匹配顺序为当前类及其子类向上依次匹配。 3.统一数据返回格式 3.1为什么需要统一数据返回格式 统一数据返回格式有以下优点: 方便前端程序员更好的接收和解析后端数据接口返回的数据降低前端程序员和后端程序员的沟通成本按照某个格式实现就行了有利于项目统一的数据的维护和修改有利于后端技术部门的统一规范的标准制定 3.2统一数据返回格式的实现 统一的数据格式返回可以使用ControllerAdvice ResponseBodyAdvice的方法实现具体实现代码如下 ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {/****判断内容是否需要重写我们这里默认需要重写**/Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {//构造统一的返回格式HashMapString, Object result new HashMap();result.put(state, 1);result.put(msg, );result.put(data, body);return result;} } 4.总结 登录校验使用WebMvcConfigurer HandlerInterceptor实现统一异常处理使用ControllerAdvice ExceptionHandler 来实现统一的返回值处理使用ControllerAdvice ResponseBodyAdvice来实现
http://wiki.neutronadmin.com/news/397084/

相关文章:

  • 郑州网站建设更好建立网站有什么要求
  • 多少钱做网站策划大型活动公司
  • 长春 网站 设计公司深圳黄页信息网
  • 刚做还网站第一时间抓取vscode怎么做网页
  • 企业网站建设内容规划wordpress 游戏网页
  • 微信官方网站首页成都网站建设 冠辰网站建设
  • 好看的网站色彩搭配wordpress主题tstyle
  • 自适应网站是什么五易网络
  • 郑州响应式建站高新区规划建设局网站
  • 重庆网站备案公司新丝路网站建设
  • 网站统计 中文域名去大连需要下载哪些软件
  • 学编程做网站wordpress迁移修改域名
  • 叫外包公司做网站不肯给源代码的网站开发如何找甲方
  • php网站开发实战教程安徽外经建设集团网站
  • 多用户智能网站建设源码在线教育网站开发文档
  • 关于网站开发的文献设计素材网站情人节
  • 凡科网做网站贵吗怎么自己创建一个网站
  • 纺织面料做哪个网站好山西建设注册中心网站
  • 齐齐哈尔企业网站排名优化合肥市蜀山区做个网站多少钱
  • 武邑网站建设价格app开发定制开发
  • 网站用户反馈托管管理系统app
  • 网站升级建设费用吗福州哪里会网站制作的
  • 手机靓号网站建设线上线下相结合的营销模式
  • 网站开发用什么系统比较好360免费wifi怎么安装
  • 南通做网站优化个人网站备案能做什么内容
  • 自己做电视视频网站关于网站建设的论坛
  • 建设银行长沙招聘网站wordpress get_most_viewed
  • 杭州 电子商务网站建设 网络服务网站建设有哪几种形式
  • 网站开发与设计多少钱一个网站什么是嵌入式软件工程师
  • 标准网站是哪个创建网页的三种方法