前后端分离

前面讨论了springboot下security很多常用的功能,其它的功能建议参考官方文档学习。网页版登录的形式现在已经不是最流行的了,最流行的是前后端分离的登录方式,前端单独成为一个项目,与后台的交互,包括登录认证和授权都是由异步接口来实现。在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。这种应用模式比较适合纯网页应用,

但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。

在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。在前后端分离的应用模式中 ,前端与后端的耦合度相对较低。

在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。

前后端分离出现的跨域问题

前后端分离后,出现的经典问题就是跨域问题。跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源(域名,协议,端口)策略造成的,是浏览器对JavaScript施加的安全限制。具体的跨域理论跨域自行查询学习。在security中,解决跨域问题是非常简单的。只需要增加几行配置即可。

简单示例

来写一个简单的例子来实现前后端分离的异步登录。首先引入依赖:

修改springboot默认配置文件,添加默认用户:

启动类不用修改,添加一个接口:

下面来配置security配置类,首先配置登录,异步登录不再需要后台配置登录页面地址,只需要配置登录参数和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/spring-boot-security 12

SpringBootSecurity学习(12)前后端分离版之简单登录的更多相关文章

  1. SpringBootSecurity学习(13)前后端分离版之JWT

    JWT 使用 前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录功能.但是这种基本的登录和前面的页面登录还有一个一样的地方,就是使用session和c ...

  2. Jeecg-Boot前后端分离版

    Jeecg-Boot前后端分离版http://www.jeecg.org/forum.php?gid=229 Jeecg-Boot 快速开发平台http://boot.jeecg.org/user/l ...

  3. springboot-vue前后端分离session过期重新登录

    springboot-vue前后端分离session过期重新登录 简单回顾cookie和session cookie和session都是回话管理的方式 Cookie cookie是浏览器端存储信息的一 ...

  4. SpringBootSecurity学习(15)前后端分离版之 OAuth2.0简单示例

    OAuth2.0 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者.客户端来申请资源,资源所有者同意以后,资源服务器可以向客户端颁发令牌.客户端通过令牌,去请求数据.也就是说, ...

  5. SpringBootSecurity学习(17)前后端分离版之 OAuth2.0 数据库(JDBC)存储客户端

    自动批准授权码 前面我们授权的流程中,第一步获取授权码的时候,都会经历一个授权是否同意页面: 这个流程就像第三方登录成功后,提问是否允许获取昵称和头像信息的页面一样,这个过程其实是可以自动同意的,需要 ...

  6. SpringBootSecurity学习(14)前后端分离版之 OAuth2.0介绍

    登录总结 前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登录问题都能解决了,即使在分布式开发,或者微服务开发中实现登录也基本没有问题了.securit ...

  7. SpringBootSecurity学习(19)前后端分离版之OAuth2.0 token的存储和管理

    内存中存储token 我们来继续授权服务代码的下一个优化.现在授权服务中,token的存储是存储在内存中的,我们使用的是 InMemoryTokenStore : 图中的tokenStore方法支持很 ...

  8. SpringBootSecurity学习(23)前后端分离版之OAuth2.0 其它模式

    密码模式 前面介绍了授权码模式和刷新令牌两种获取最新令牌的方法,下面来看一下其它模式.首先看密码模式,我们默认配置的三种模式中其实就包含密码模式的支持: 因此我们启动项目,直接使用密码模式即可,访问地 ...

  9. SpringBootSecurity学习(26)前后端分离版之github单点登录

    单点登录(SSO) 关于oauth2.0,最后我们再来学习一下单点登录.前面介绍过单点登录的定义,单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一. ...

随机推荐

  1. Java连载23-for循环练习、while\dowhile详解

    一.for循环练习 1.例子:输入九九乘法表 public class d23_{ public static void main(String[] args) { for(int i = 1;i&l ...

  2. MSIL实用指南-Action的生成和调用

    MSIL实用指南-Action的生成和调用 System.Action用于封装一个没有参数没有返回值的方法.这里生成需要Ldftn指令. 下面讲解怎生成如下的程序. class ActionTest ...

  3. 分清<url-pattern>/</url-pattern>与<url-pattern>/*</url-pattern>的不同

    在写springMVC配置web.xml的时候会碰到下面有时候写/,有的时候又写/: 那么这两者有什么区别呢?我现在进行一些讲解: 1.当配置<url-pattern>/</url- ...

  4. Java多线程的中断原理和 interrupt() 几个方法简介

    上节讲到,线程被 wait() 通知后进入等待池,可以由本线程的 interrupt() 方法解救,使本线程可以去重新竞争锁等等.是如何实现的呢? 实际上,中断仅仅是在线程对象做一个标记而已,称为中断 ...

  5. hdu 2615 Division(暴力)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2615 题解:挺简单的暴力枚举,小小的分治主要是看没人写题解就稍微写一下 #include <io ...

  6. 牛客网暑期ACM多校训练营(第四场) G Maximum Mode 思维

    链接:https://www.nowcoder.com/acm/contest/142/G来源:牛客网 The mode of an integer sequence is the value tha ...

  7. 2015 JSOI冬令营训练 彩色格子 题解

    解析 棋盘上黑白格染色.曼哈顿距离偶数:奇偶性相同. 枚举有几种颜色分到白格,组合数计算即可. 注意预处理,时间还是比较宽裕的. 为了不重复计数,考虑枚举严格用了i种颜色,我们再枚举分配j种给白集合. ...

  8. 【Offer】[30] 【包含min函数的栈】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是0(1). ...

  9. WoSign新证书系统通过德国Cure53安全测试

    近日,沃通WoSign新证书系统顺利通过德国Cure53白盒子安全测试,并公开发布审计报告总结版. 据悉,根据去年10月份Mozilla提出的整改要求,沃通WoSign投入研发力量高标准严要求地重新开 ...

  10. Accuarcy and Precision

    机器学习中,Accuarcy 和 Precision 有什么区别呢? Accuracy = (TP+TN)/TOTAL SAMPLES 也就是计算正确的样本数,占到总样本数的比率 定义是: 对于给定的 ...