前面讨论了springboot下security不少经常使用的功能,其它的功能建议参考官方文档学习。网页版登陆的形式如今已经不是最流行的了,最流行的是先后端分离的登陆方式,前端单独成为一个项目,与后台的交互,包括登陆认证和受权都是由异步接口来实现。在先后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端须要控制前端的展现,前端与后端的耦合度很高。这种应用模式比较适合纯网页应用,html
可是当后端对接App时,App可能并不须要后端返回一个HTML网页,而仅仅是数据自己,因此后端本来返回网页的接口再也不适用于前端App应用,为了对接App后端还需再开发一套接口。前端
在先后端分离的应用模式中,后端仅返回前端所需的数据,再也不渲染HTML页面,再也不控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端本身决定,网页有网页的处理方式,App有App的处理方式,但不管哪一种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据便可。在先后端分离的应用模式中 ,前端与后端的耦合度相对较低。git
在先后端分离的应用模式中,咱们一般将后端开发的每一个视图都称为一个接口,或者API,前端经过访问接口来对数据进行增删改查。spring
先后端分离后,出现的经典问题就是跨域问题。跨域,指的是浏览器不能执行其余网站的脚本。它是由浏览器的同源(域名,协议,端口)策略形成的,是浏览器对JavaScript施加的安全限制。具体的跨域理论跨域自行查询学习。在security中,解决跨域问题是很是简单的。只须要增长几行配置便可。数据库
来写一个简单的例子来实现先后端分离的异步登陆。首先引入依赖:json
修改springboot默认配置文件,添加默认用户:segmentfault
启动类不用修改,添加一个接口:后端
下面来配置security配置类,首先配置登陆,异步登陆再也不须要后台配置登陆页面地址,只须要配置登陆参数和api地址便可:api
而后加上受权配置和登陆成功的处理:跨域
最后加上csrf配置:
最简单的配置已经完成了,最后来看一下登陆成功的处理:
返回了一个json形式的登陆成功消息。
来进行一个简单的测试,启动项目,使用postman直接访问hello接口:
访问不成功,返回了登陆的html页面,关于没有权限的处理,后面会作的更加友好。下面用接口进行登陆:
能够看到正常登陆成功,postman中也多了一个cookie信息:
这和浏览器的cookie是同样的,删掉之后就成了未登陆状态。如今访问hello接口,能够看到正常的效果:
添加跨域配置很是简单,首先在security配置中调用cors方法:
而后咱们打开springboot的官方文档,查看跨域配置:
能够看到,在springboot中,全局的跨域配置很是简单,咱们来模仿写一个bean:
这样跨域就配置好了。
来看一下登陆失败(好比帐号错误)时的处理器:
配置登陆失败处理器:
测试:
来看一下登陆超时或者未登陆的异常处理器:
配置登陆超时或者未登陆处理器:
测试,在未登陆的状况下,直接访问hello接口:
如今提示友好了不少。最后看一下权限不足处理器:
配置权限不足处理器:
而后开启方法级别的权限注解,在hello方法上面配置HELLO权限:
在配置文件中,给默认用户admin配置一个其余角色:
而后重启项目,首先在postman中,进行登陆,而后再访问hello接口:
此时就会根据处理器的结果提示权限不足。
上面是一个简单的先后端分离的登陆的例子。这里只应用了几个简单的功能,不过前面讨论过的从数据库中查询用户,动态权限,共享session,记住我等等的功能,也均可以加入到先后端分离的登陆功能中,这些内容的使用和前面网页版的登陆没有什么区别。使用这些彻底能够知足先后端分离的登陆和受权功能。
代码地址 : https://gitee.com/blueses/spr... 12