HTTPS协议 HTTPS就是在HTTP的基础上加了一层SSL/TLS加密,就像是给你的信件加了个保密信封。这样,即使信件在传输过程中被别人截获,他们也看不懂里面的内容。...IP地址和端口就像是信件上的地址和门牌号,告诉邮递员信件该往哪儿送。 二、常用的网络库 有了基础知识,咱们再来看看实际开发中常用的网络库。...在Retrofit和OkHttp中,连接复用是默认开启的,但你可以通过配置进一步优化。...如何实现网络请求的重试机制? 重试机制就像是邮递员送信失败后,再试几次。在Retrofit和OkHttp中,可以通过拦截器实现重试机制。...如何处理网络请求的超时? 超时设置就像是给邮递员设定一个时间限制,超过时间就返回。在Retrofit和OkHttp中,可以通过设置超时时间来避免请求卡住。
,还没搞完,稍安勿躁哈 203 Non-authoritative Information 请求头来自本地或者第三方,未得到服务器授权 204 No Content 工作中遇见一个前端多条件组合查询,我后端没查到数据... 未授权,用户没有权限访问请求的资源。...403 Forbidden 404 Not Found url不对 405 Method Not Allowed 请求中的方法和url的资源不匹配,如Spring “GetMapping...” 和 “RequestBody”混用,应改为 “GetMapping”加“RequestParam” 500 Internal Server Error 代码逻辑错误,有异常抛出 501...Not Implemented 客户端请求方法不对(非get,post, put, delete,patch, head,options, trace, connect等),服务端无法识别,不支持其请求的任何资源
spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射...不过Spring的中央处理器,DispatcherServlet,能做的比这更多。 下图展示了Spring Web MVC的DispatcherServlet处理请求的工作流。...spring mvc处理请求的流程.jpg 在web.xml中的配置 异常处理方式.png Spring的处理器异常解析器HandlerExceptionResolver接口的实现负责处理各类控制器执行过程中出现的异常。...比如它能提供异常被抛出时正在执行的是哪个处理器这样的信息。
不要发生了错误但给2xx响应,客户端可能会缓存成功的http请求; 2. 正确设置http状态码,不要自定义; 3. ...对第三点的实现稍微多说一点: Java服务器端一般用异常表示 RESTful API的错误。API 可能抛出两类异常:业务异常和非业务异常。 ...非业务类异常 表示不在预期内的问题,通常由类库、框架抛出,或由于自己的代码逻辑错误导致,比如数据库连接失败、空指针异常、除0错误等等。 业务类异常必须提供2种信息: 1. ...如果抛出该类异常,HTTP响应状态码应该设成什么; 2. 异常的文本描述; 在Controller层使用统一的异常拦截器: 1. ...403 forbidden 无权限 404 not found 资源不存在 500 internal server error 非业务类异常 503 service unavaliable 由容器抛出,
DRY是Don't-Repeat-Yourself的缩写,是一种代码编写的原则,即不要重复自己的工作。我个人有些代码洁癖,凡是发现我需要复制粘贴代码的地方,就想着能怎样去除重复的工作。...在DRF中完成Authorization工作的就是DEFAULT_PERMISSION_CLASSES配置项,以及针对每个APIView配置的permission_classes,他是用来精确控制请求放对某一资源有无权限...在RESTful规范中,无鉴权信息是401错误而无权限是403错误。在DRF的官方文档中有详细例子这里就不再赘述。...我们经常会需要抛出异常,有些是主动抛出、有些是未捕获的异常,在这些情况下,我们都希望日志记录异常的堆栈信息,然后返回一个规范的响应(格式与上一节中一致),这样我们就需要更改异常处理。...在Django+DRF中异常处理有两个重载点: 中间件中的process_exception函数 DRF的EXCEPTION_HANDLER配置 而其中EXCEPTION_HANDLER的作用时间早于中间件
同时认识到他们在 WAR 或 EAR 级别无法移植。因此如果你更换服务器环境,还需要大量工作去重新配置你的应用程序。...异常 UsernameNotFoundException 用户名没有发现异常。 在loadUserByUsername 中是需要通过自己的逻辑从数据库中取值的。...,正常登陆,登陆后跳转到main1.html,可以访问到这个页面 但是将配置类中将 admin写成 adMin,如下图 则会出现403,权限异常,如下下图 ?...十一、自定义403 处理方案 使用Spring Security 时经常会看见403(无权限),默认情况下显示的效果如下: ?...()方法中,自定义异常处理页面 //自定义异常处理页面-403 http.exceptionHandling() .accessDeniedHandler(myAccessDeniedHandler
但出了问题火葬场 前言 上篇文章通过我模拟的跨域请求实例和结果分析,相信小伙伴们都已经80%的掌握了CORS到底是怎么一回事以及如何使用它。...而Spring4.2是在2015-06发布给与的全面支持,从时间轴上看Spring的响应速度还是把握得不错的(毕竟CORS经历过一段时间市场的考验Spring才敢全面纳入进来支持嘛~) Tips:在Spring4.2...initHandlerMappings(this.applicationContext); } } // 从这些HandlerMapping找到MatchableHandlerMapping // 若一个都木有,此方法抛出异常...:即使有Origin请求头,但若是同源的也不处理 是否配置了CORS规则,若没有配置: 1....若是预检请求,直接决绝403,return false 2. 若不是预检请求,则本处理器不处理 正常处理CROS请求,大致是如下步骤: 1. 判断 origin 是否合法 2.
Spring之RestTemplate中级使用篇 前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景...;而后端进行校验的条件中,往往会拿请求头的数据,因此这也就要求我们在使用时,主动的塞入一些请求头信息 1....当然作为对比,当不加入headers时,看下返回什么鬼, 406异常,但是我们后端定义的是403,为什么会返回406呢? ?...使用exchange对上面的post请求进行简单的替换如下, 基本上除了多一个参数之外没有什么区别了 @Test public void testPostHeader() { String url...文件上传 post除了传表单数据(json串)之外,还有一个常见的就是上传文件了,实际上使用RestTemplate来实现文件上传,算是比较简单的了,和前面的使用基本上也没有什么差别,只是将文件作为params
[logo] Spring之RestTemplate中级使用篇 前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景...;而后端进行校验的条件中,往往会拿请求头的数据,因此这也就要求我们在使用时,主动的塞入一些请求头信息 1....post的请求request参数传入 [2D203A36995BE818CECBD936F535875F.jpg] 当然作为对比,当不加入headers时,看下返回什么鬼, 406异常,但是我们后端定义的是...,使用姿势和get/post没有什么区别,只是可以由调用发自己来选择具体的请求方法 使用exchange对上面的post请求进行简单的替换如下, 基本上除了多一个参数之外没有什么区别了 @Test public...文件上传 post除了传表单数据(json串)之外,还有一个常见的就是上传文件了,实际上使用RestTemplate来实现文件上传,算是比较简单的了,和前面的使用基本上也没有什么差别,只是将文件作为params
处理本例请求的是RequestMappingHandlerMapping,获取处理器的方法在父类上: AbstractHandlerMapping: // 默认使用的是UrlBasedCorsConfigurationSource...OPTIONS方法上的 若是简单请求/真实请求:在原来的处理链上加一个拦截器chain.addInterceptor(new CorsInterceptor(config)),由这个拦截器它最终复杂来处理相关逻辑...) return config.applyPermitDefaultValues(); } 它显著的特点是:和Handler强绑定,因此在注册Mapping的时候就完成初始化工作。...这个问题是系列文章的第一篇我抛出来的,因为有一个现象是:简单请求我可以在Controller的方法内向response手动添加请求头搞定。...这个问题倒是困扰了我好一会,直到我直到了Spring MVC对它的处理过程。 问题的现象是:response的响应头都有,但http状态码却是403,跨域失败。结果如下截图: ?
数据独立性:spring mvc 的方法之间基本上独立的,独享 request 和 response 数据,请求数据通过参数获取,处理结果通过 ModelMap 交回给框架,方法之间不共享变量;而 struts2...防御手段: 验证请求来源地址; 关键操作添加验证码; 在请求地址添加 token 并验证。 七、异常 74.throw 和 throws 的区别? throw:是真实抛出一个异常。...throws:是声明可能会抛出一个异常。 75.final、finally、finalize 有什么区别?...应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。 85.get 和 post 请求有哪些区别? get 请求会被浏览器主动缓存,而 post 不会。...get 传递参数有大小限制,而 post 没有。 post 参数传输更安全,get 的参数会明文限制在 url 上,post 不会。 86.如何实现跨域?
"),/**access_denied**/RC403(403,"无访问权限,请联系管理员授予权限"),/**服务异常**/RC500(500,"系统异常,请稍后重试");/**自定义状态码**/private...在浏览器中请求地址http://localhost:8080/hello,结果如下:抛出异常了!错误原因如下。...3.4、全局异常处理在上文的介绍中,当遇到异常时第一时间想到的是try...catch。其实大量的try...catch,不仅编程工作量很大,而且可读性也差。...在 Spring Boot 中,其实我们不用一个一个的去写,我们可以利用@ControllerAdvice和@ExceptionHandler注解实现全局异常处理器,拦截controller层抛出的异常...方式一:在接口层直接返回标准格式,同时通过全局异常处理器来捕捉并处理异常;方式二:在接口层返回业务对象,通过实现ResponseBodyAdvice接口统一封装格式如果不希望 Spring Boot 托管响应内容
异常 UsernameNotFoundException用户名没有发现异常。在loadUserByUsername中是需要通过自己的逻辑从数据库中取值的。...此处依然是 POST 请求,所以跳转到可以接收 POST请求的控制器/error中。...处理方案 使用 Spring Security 时经常会看见 403(无权限),默认情况下显示的效果如下: 而在实际项目中可能都是一个异步请求,显示上述效果对于用户就不是特别友好了。...---- 开启注解,默认不启用注解配置 在 启 动 类 ( 也 可 以 在 配 置 类 等 能 够 扫 描 的 类 上 ) 上 添 加@EnableGlobalMethodSecurity(securedEnabled...在默认配置下,即便已经登录了,页面中发起PATCH,POST,PUT和DELETE请求依然会被拒绝,并返回403,需要在请求接口的时候加入csrfToken才行。
前言 最近几篇我对Spring Security中用户认证流程进行了分析,同时在分析的基础上我们实现了一个验证码登录认证的实战功能。...今天来谈谈两个和认证授权息息相关的两个状态401和403以及它们如何在Spring Security融入体系中的。 2. 401 未授权 我在RFC 7235[1]中找到了相关的表述。...3. 403 禁止访问 表述参见RFC 7231[2]。403状态代码表示服务器已理解了客户端的请求,但拒绝授权。如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限。...Spring Security 中的这两种状态 通常情况Spring Security中的401和403两种状态都是以异常的形式来进行体现的,由AuthenticationException和AccessDeniedException...仅仅当登录认证失败返回了401,其它情况的这两种异常都返回了403。 ? Spring Security异常处理体系 默认情况下他们都会被转发到异常页面。
Spring提供了多种方式将异常转换为响应: 特定的Spring异常将会自动映射为指定的HTTP状态码; 异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码; 在方法上可以添加...当抛出SpittleNotFoundException异常时,这是一种请求资源没有找到的场景。...7.5 跨重定向请求传递数据 在处理完POST请求后,通常来讲一个最佳实践就是执行一下重定向。...然后,我们了解了如何处理Spring MVC控制器所抛出的异常。...这样的话,就能采用非常恰当的方式为POST请求执行一个重定向回应,而且能够将处理POST请求时的模型数据传递过来,然后在重定向后使用或展现这些模型数据。
:/user/login // 在类上的@RequestMapping相当于声明一个根路径,在请求的时候他会把类和方上的路径进行拼接 3.3.2 注解在Controller类的方法上 method属性:...如果抛出其他的异常的时候,这个方法就不可以接收到这个异常。 3.1.4.3 就近原则 当异常发生时,Spring会选择最接近抛出异常的处理方法。...当然在Spring Boot中也可以使用,但是Spring Boot中有它全自动化配置的异常处理,因为是全自动化的,因此也可以自己定制,比如定制它的异常页面,异常信息提示,异常视图。...如果抛出其他的异常的时候,这个方法就不可以接收到这个异常。 3.1.4.3 就近原则 当异常发生时,Spring会选择最接近抛出异常的处理方法。...当然在Spring Boot中也可以使用,但是Spring Boot中有它全自动化配置的异常处理,因为是全自动化的,因此也可以自己定制,比如定制它的异常页面,异常信息提示,异常视图。
test上 具体实现如下: 自定义一个注解,只要在类上加个 @Aspect 注解即可。...@Component 注解将该类交给 Spring 来管理。...>>>" + id); System.out.println("name->>>>>>>>>>>>>>>>>>>>>>" + name); // name不是管理员则抛出异常...当被切方法执行过程中抛出异常时,会进入 @AfterThrowing 注解的方法中执行,在该方法中可以做一些异常的处理逻辑。...该方法中的第二个入参即为抛出的异常。
在前几天发布的《Spring Cloud实战小贴士:Zuul统一异常处理(一)》一文中,我们详细说明了当Zuul的过滤器中抛出异常时会发生客户端没有返回任何内容的问题以及针对这个问题的两种解决方案:一种是通过在各个阶段的过滤器中增加...而对于从post过滤器中抛出异常的情况,在经过了error过滤器处理之后,就没有其他类型的过滤器来接手了,这就是使用之前所述方案存在不足之处的根源。...而对于post阶段抛出异常的情况下,由error过滤器处理之后并不会在调用post阶段的请求,自然这些error.*参数也就不会被SendErrorFilter消费输出。...所以,如果我们在自定义post过滤器的时候,没有正确的处理异常,就依然有可能出现日志中没有异常并且请求响应内容为空的问题。...,当有异常抛出的时候,记录下抛出异常的过滤器,这样我们就可以在ErrorExtFilter过滤器的shouldFilter方法中获取并以此判断异常是否来自post阶段的过滤器了。
本篇概览 前文《Spring Cloud Gateway过滤器精确控制异常返回(分析篇)》咱们阅读源码,了解到Spring Cloud Gateway是如何处理全局异常信息的,学了那么多理论,不免手痒想实战验证学习效果...:zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议 这个git项目中有多个文件夹,本篇的源码在spring-cloud-tutorials文件夹下,如下图红框所示:...spring-cloud-tutorials文件夹下有多个子工程,本篇的代码是gateway-change-body,如下图红框所示: 第一种:抛出ResponseStatusException异常...异常,设置了返回码为400,message为一段中文描述: 接下来运行nacos、provider-hello工程、gateway-change-body工程 用postman发请求试试,请求和响应的详情如下图...按照咱们的设定,这里应该显示请求参数必须包含user-id字段,看来咱们遇到一只拦路虎了 小小拦路虎 咱们代码中,抛异常的时候设定message内容如下图红框所示,但运行的时候返回的是空字符串,这是怎么回事呢
:/user/login // 在类上的@RequestMapping相当于声明一个根路径,在请求的时候他会把类和方上的路径进行拼接 1.3.2 注解在 Controller 类的方法上 method...CET 和 POST 请求方式完成请求任务。...1.14 @ExceptionHandler 1.14.1 基本用法 Spring 的 @ExceptionHandler 可以用来统一处理方法抛出的异常,比如这样: @ExceptionHandler...如果抛出其他的异常的时候,这个方法就不可以接收到这个异常。 1.14.3 就近原则 当异常发生时,Spring 会选择最接近抛出异常的处理方法。...当然在 Spring Boot 中也可以使用,但是 Spring Boot 中有它全自动化配置的异常处理,因为是全自动化的,因此也可以自己定制,比如定制它的异常页面,异常信息提示,异常视图。
领取专属 10元无门槛券
手把手带您无忧上云