问题:
1、 SpringBoot异常的设计的原理
2、 前后端分离开发,日志应该如何进行记录,在出现问题的时候,方便定位问题?
3、 跨域的含义
回答:
3、
跨域的含义:跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
跨域的访问会带来许多安全性的问题,比如,cookie 一般用于状态控制,常用于存储登录的信息,如果允许跨域访问,那么别的网站只需要一段脚本就可以获取你的 cookie,从而冒充你的身份去登录网站,造成非常大的安全问题,因此,现代浏览器均推行同源策略。
跨域解决方案:
通过 jsonp 跨域
document.domain + iframe 跨域
location.hash + iframe
window.name + iframe 跨域
postMessage 跨域
跨域资源共享(CORS)
nginx 代理跨域
nodejs 中间件代理跨域
WebSocket 协议跨域
什么是同源策略?
同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到 XSS、CSFR 等攻击。所谓同源是指”协议+域名+端口”三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。
原文地址:https://www.leiue.com/what-is-cross-domain
2、
前端如何定位线上BUG:使用前端监控系统来记录日志。
一.统计前端错误:我们可以通过重写window.onerror 方法来进行jsError的监听。它能够为我们记录下线上的很多错误,以及一些额外的信息。
二.分析错误详情:线上的错误日志统计出来了,我们可以解析这些错误日志来知道用户的机型,版本,系统平台,影响范围,以及具体的错误位置,从而提高我们解决问题的效率。
三.如果我们无法复现用户错误的时候,那么我们就很难解决问题。我们需要用户的行为记录。记录下用户的跳转日志,就能够复现出用户的行为,从而复现BUG。记录下用户的请求时间,参数,响应时间,响应状态等等,可以具体分析出来接口对页面的影响。记录用户的点击行为。
后端如何定位线上BUG:
一.记录日志:以Spring Boot项目为例。默认使用LogBack日志系统,默认将日志打印到控制台上,默认的日志级别为INFO。将日志信息保存到日志文件中在application.properties配置文件中加上logging.file和logging.path即可。配置日志级别在application.properties配置文件中添加logging.level即可,日志级别总共有TRACE < DEBUG < INFO < WARN < ERROR < FATAL ,且级别是逐渐提供,如果日志级别设置为INFO,则意味TRACE和DEBUG级别的日志都看不到。
原文地址:https://www.cnblogs.com/warm-stranger/p/10430346.html
http://www.webfunny.cn/demo/overview.html
https://www.cnblogs.com/bigdataZJ/p/springboot-log.html
1、
一:BasicErrorController,这个类是默认处理/error请求的。
其中有这样一段代码来处理错误请求:
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class BasicErrorController extends AbstractErrorController {
@RequestMapping(produces = "text/html")//产生html类型的数据;浏览器发送的请求来到这个方法处理
public ModelAndView errorHtml(HttpServletRequest request,
HttpServletResponse response) {
HttpStatus status = getStatus(request);
Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(
request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));
response.setStatus(status.value());
//去哪个页面作为错误页面;包含页面地址和页面内容
ModelAndView modelAndView = resolveErrorView(request, response, status, model);
}
@RequestMapping
@ResponseBody //产生json数据,其他客户端来到这个方法处理;
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = getErrorAttributes(request,
isIncludeStackTrace(request, MediaType.ALL));
HttpStatus status = getStatus(request);
return new ResponseEntity<Map<String, Object>>(body, status);
}
二:DefaultErrorViewResolver
处理步骤:
一但系统出现4xx或者5xx之类的错误;ErrorPageCustomizer就会生效(定制错误的响应规则);就会来到/error请求;就会被BasicErrorController处理。
原文地址:https://blog.csdn.net/sihai12345/article/details/81220781