Axiso 解决跨域访问
首先请检查下你的 Vue 版本,Vue2 和 Vue3 跨域方式不同,在命令行中输入 vue -V,可以查看当前的 Vue 版本。
一、Vue2 版本
为了复现跨域问题,这里以访问 Ve2x 的一个公告API为例,当我们不做特殊处理,直接访问如下:
1234567this.$axios.get("https://www.v2ex.com/api/site/info.json").then(res=>{ console.log(res)}).catch(err=>{ console.log(err)})
当我们运行程序后,控制台报错如下:
可以看到浏览器拦截了我们的请求,因为我们跨域了,下面解决跨域问题。
Step1:配置BaseUrl
首先在main.js中,配置下我们访问的Url前缀:
12345678910111213141516import Vue from 'vue'import App from './App'import Axios from ...
Web 三方登录实现(基于OAuth2.0,包含Github和QQ登录,附源码)
关于 OAuth2.0 的理论基础参考阮一峰老师的《理解 OAuth 2.0》,其中关于授权码模式就是本篇文章的重点。
本文着重于代码,关于理论不再赘述,关于不同公司的三方登录流程,只要遵循 OAuth2.0 规范,都大同小异。本文介绍 GitHub 和 QQ 两种,因为这两种无需审核,即可食用。
一、GitHub 登录
1.1 注册应用
进入 Github 的 Setting 页面,点击 Developer settings,如图所示:
进入后点击 New Oauth App,如图所示:
在其中填写主页 URL 和 回调 URL,回调 URL 尤为重要,如果不太明白可以先和我一致。
点击注册后,上方会生成 Client ID 和 Client Secret,这两个后面要用到。
1.2 HTML 页面
页面十分简单,只有两个跳转链接:
1234567891011121314<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&quo ...
理解 OAuth 2.0
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749。
一、应用场景
为了理解OAuth的适用场合,让我举一个假设的例子。
有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。
问题是只有得到用户的授权,Google才会同意"云冲印"读取这些照片。那么,"云冲印"怎样获得用户的授权呢?
传统方法是,用户将自己的Google用户名和密码,告诉"云冲印",后者就可以读取用户的照片了。这样的做法有以下几个严重的缺点。
123456789(1)"云冲印"为了后续的服务,会保存用户的密码,这样很不安全。(2)Google不得不部署密码登录,而我们知道,单纯的密码登录并不安全。(3)"云冲印"拥有了获取用户储存 ...
SpringBoot 集成 Spring Security(5)——权限控制
在第一篇中,我们说过,用户<–>角色<–>权限三层中,暂时不考虑权限,在这一篇,是时候把它完成了。
为了方便演示,这里的权限只是对角色赋予权限,也就是说同一个角色的用户,权限是一样的。当然了,你也可以精细化到为每一个用户设置权限,但是这不在本篇的探讨范围,有兴趣可以自己实验,原理都是一样的。
一、数据准备
1.1 创建 sys_permission 表
让我们先创建一张权限表,名为 sys_permission:
123456789CREATE TABLE `sys_permission` ( `id` int(11) NOT NULL AUTO_INCREMENT, `url` varchar(255) DEFAULT NULL, `role_id` int(11) DEFAULT NULL, `permission` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_roleId` (`role_id`), CONSTRAINT `fk_roleId` FOREIGN KEY (` ...
Nginx 缓存使用官方指南
我们都知道,应用程序和网站一样,其性能关乎生存。但如何使你的应用程序或者网站性能更好,并没有一个明确的答案。代码质量和架构是其中的一个原因,但是在很多例子中我们看到,你可以通过关注一些十分基础的应用内容分发技术,来提高终端用户的体验。其中一个例子就是实现和调整应用栈(application stack)的缓存。这篇文章,通过几个例子来讲述如何使用Nginx缓存。此外,结尾处还列举了一些常见问题及解答。
基础
一个 web 缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝。如果一个客户端请求的内容在缓存中存储,则可以直接在缓存中获得该内容而不需要与服务器通信。这样一来,由于 web 缓存距离客户端“更近”,就可以提高响应性能,并更有效率的使用应用服务器,因为服务器不用每次请求都进行页面生成工作。
在浏览器和应用服务器之间,存在多种“潜在”缓存,如:客户端浏览器缓存、中间缓存、内容分发网络(CDN)和服务器上的负载平衡和反向代理。缓存,仅在反向代理和负载均衡的层面,就对性能提高有很大的帮助。
举个例子说明,去年,我接手了一项任务,这项任务的内 ...
SpringBoot 集成 Spring Security(4)——自定义表单登录
通过前面三篇文章,你应该大致了解了 Spring Security 的流程。你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢,比如添加一个验证码…
一、添加验证码
1.1 验证码 Servlet
验证码的 Servlet 代码,大家无需关心其内部实现,我也是百度直接捞了一个,直接复制即可。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 ...
SpringBoot 集成 Spring Security(3)——异常处理
不知道你有没有注意到,当我们登陆失败时候,Spring security 帮我们跳转到了 /login?error Url,奇怪的是不管是控制台还是网页上都没有打印错误信息。
这是因为首先 /login?error 是 Spring security 默认的失败 Url,其次如果你不手动处理这个异常,这个异常是不会被处理的。
一、常见异常
我们先来列举下一些 Spring Security 中常见的异常:
UsernameNotFoundException(用户不存在)
DisabledException(用户已被禁用)
BadCredentialsException(坏的凭据)
LockedException(账户锁定)
AccountExpiredException (账户过期)
CredentialsExpiredException(证书过期)
…
以上列出的这些异常都是 AuthenticationException 的子类,然后我们来看看 Spring security 如何处理 AuthenticationException 异常的。
二、源码分析
我们知道异常处 ...
SpringBoot 集成 Spring Security(2)——自动登录
在上一章:《SpringBoot集成Spring Security(1)——入门程序》中,我们实现了入门程序,本篇为该程序加上自动登录的功能。
一、修改 login.html
在登陆页添加自动登录的选项,注意自动登录字段的 name 属性必须是 remember-me :
login.html12345678910111213141516171819202122<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>登陆</title></head><body><h1>登陆</h1><form method="post" action="/login"> <div> 用户名:<input type="text" name=&qu ...
SpringBoot 集成 Spring Security(1)——入门程序
因为项目需要,第一次接触 Spring Security,早就听闻 Spring Security 功能强大但上手困难,学习了几天出入门道,特整理这篇文章希望能让后来者少踩一点坑(本文附带实例程序,请放心食用)
本系列文章环境:SpringBoot 2.0 + Mybatis,SpringSecurity 5.0+ 版本变动较多,且不兼容之前版本,确保你的 SpringBoot 版本为 2.0,能帮你避免掉大部分的坑。
一、导入依赖
导入 spring-boot-starter-security 依赖,在 SpringBoot 2.0 环境下默认使用的是 5.0 版本。
1234567891011121314151617181920212223242526<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><de ...
ActiveMQ 初探(3)——与 SpringBoot 整合
一、发送即时消息
1.1 添加依赖包
这里我们不使用网上大多数的 spring-boot-starter-activemq,因为我配的时候总是有问题,我改为使用如下的三个依赖包,分别是 activemq连接池包、activemq包 和 jms包:
12345678910111213141516<!-- ActiveMQ连接池 --><dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.15.3</version></dependency><!-- ActiveMQ --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifac ...