详解Spring Security的formLogin登录认证模式

一、formLogin的应用场景

在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验证,而且没有定制的登录页面,所以使用场景比较窄。对于一个完整的应用系统,与登录验证相关的页面都是高度定制化的,非常美观而且提供多种登录方式。这就需要Spring Security支持我们自己定制登录页面,也就是本文给大家介绍的formLogin模式登录认证模式。

准备工作

新建一个Spring Boot 的web应用

准备一个login.html登录页面,页面内容非常简单,一个from表单、用户名和密码输入框,一个提交按钮

准备一个首页index.html,在登录成功之后需要进入index.html首页

首页可以看到syslog(日志管理)、sysuer(用户管理)、biz1(业务一)、biz2(业务二)四个页面超文本链接选项。通过controller控制层跳转页面,并在对应页面写一些标志性文字即可,不需写具体业务。

需求

我们希望biz1(业务一)、biz2(业务二)普通的操作用户user就可以访问

我们希望管理员可以访问包括syslog(日志管理)和sysuser(用户管理)在内的所有资源

以上就是本文介绍formLogin模式需要进行的准备工作及需求,下面我们就来实现其中的核心的登录验证逻辑,准备工作非常简单请自行实现。(新建spring boot应用,登录页面、首页、四个业务页面都写成非常简单的html即可,不用写实际业务和样式。)

二、说明

formLogin模式的三要素:

登录验证逻辑

资源访问控制规则,如:资源权限、角色权限

用户信息

一般来说,使用权限认证框架的的业务系统登录验证逻辑是固定的,而资源访问控制规则和用户信息是从数据库或其他存储介质灵活加载的。但本文所有的用户、资源、权限信息都是代码配置写死的,旨在为大家介绍formLogin认证模式,如何从数据库加载权限认证相关信息我还会结合RBAC权限模型再写文章的。

三、实现formLogin模式基础配置

首先,我们要继承WebSecurityConfigurerAdapter ,重写configure(HttpSecurity http) 方法,该方法用来配置登录验证逻辑。请注意看下文代码中的注释信息。

实现formLogin模式基础配置(图片点击可放大)

上面的代码分为两部分:

第一部分是formLogin配置段,用于配置登录验证逻辑相关的信息。如:登录页面、登录成功页面、登录请求处理路径等。

第二部分是authorizeRequests配置端,用于配置资源的访问权限。如:开发登录页面的permitAll开放访问,“/biz1”(业务一页面资源)需要有资源ID为"biz1"的用户才可以访问。

这时候,我们通过浏览器访问,随便测试一个没有访问权限的资源,都会跳转到login.html页面。

四、实现资源访问限制的需求

在上文中,我们配置了登录验证及资源访问的权限规则,我们还没有具体的用户,下面我们就来配置具体的用户。重写WebSecurityConfigurerAdapter的 configure(AuthenticationManagerBuilder auth)方法

实现资源访问限制的需求(图片点击可放大)

inMemoryAuthentication指的是在内存里面存储用户的身份认证和授权信息。

withUser(“user”)用户名是user

password(passwordEncoder().encode(“123456”))密码是加密之后的123456

authorities(“biz1”,“biz2”)指的是user用户拥有资源ID为biz1(业务一)和biz2(业务二)资源的权限

这样,我们就实现了文首提出的普通用户只能访问biz1(业务一)和biz2(业务二)资源的需求。那么管理员用户可以访问所有的资源的配置方式,你会不会呢?同样的配方、同样的方式、自己可以尝试一下哦!

五、静态资源访问

在我们的实际开发中,登录页面login.html和控制层Controller登录验证’/login’都必须无条件的开放。除此之外,一些静态资源如css、js文件通常也都不需要验证权限,我们需要将它们的访问权限也开放出来。下面就是实现的方法:重写WebSecurityConfigurerAdapter类的configure(WebSecurity web) 方法

静态资源访问(图片点击可放大)

详解Spring Security的formLogin登录认证模式相关推荐

  1. java按钮权限控制_详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...

  2. Spring Security使用数据库登录认证授权

    一.搭建项目环境 1.创建 RBAC五张表 RBAC,即基于角色的权限访问控制(Role-Based Access Control),就是用户通过角色与权限进行关联. 在这种模型中,用户与角色之间,角 ...

  3. 大白话详解Spring Security认证流程

    前言 Spring Seuciry相关的内容看了实在是太多了,但总觉得还是理解地不够巩固,还是需要靠知识输出做巩固. 相关版本: java: jdk 8 spring-boot: 2.1.6.RELE ...

  4. 详解Spring Security进阶身份认证之UserDetailsService(附源码)

    在上一篇Spring Security身份认证博文中,我们采用了配置文件的方式从数据库中读取用户进行登录.虽然该方式的灵活性相较于静态账号密码的方式灵活了许多,但是将数据库的结构暴露在明显的位置上,绝 ...

  5. 透过源码详解Spring Security 初始化流程

    Spring Security在3.2版本之后支持Java Configuration,即:通过Java编码形式配置Spring Security,可不再依赖XML文件配置,本文采用Java Conf ...

  6. Spring Security OAuth2 单点登录和登出

    文章目录 1. 单点登录 1.1 使用内存保存客户端和用户信息 1.1.1 认证中心 auth-server 1.1.2 子系统 service-1 1.1.3 测试 1.2 使用数据库保存客户端和用 ...

  7. Spring Security | 轻松搞定认证授权~

    文章目录 一.Spring Security 简介 二.整合 Spring Security 1.创建项目,导入依赖 2.创建数据库,搭建环境 3.配置数据库 4.创建实体类 5.实现 UserMap ...

  8. Spring Security 详解与实操第一节 认证体系与密码安全

    开篇词 Spring Security,为你的应用安全与职业之路保驾护航 你好,我是鉴湘,拉勾教育专栏<Spring Cloud 原理与实战><Spring Boot 实战开发> ...

  9. Spring Security 3 Ajax登录–访问受保护的资源

    我看过一些有关Spring Security 3 Ajax登录的博客,但是我找不到解决如何调用基于Ajax的登录的博客,匿名用户正在Ajax中访问受保护的资源. 问题 – Web应用程序允许匿名访问某 ...

最新文章

  1. 3种常见的linux版本,查看linux版本的三种常用方法
  2. 面试官: Redis 与 MySQL 双写一致性如何保证?
  3. ASP.NET MVC 导入Excel文件
  4. 一致性hash算法 - consistent hashing
  5. AI最优论文+代码查找神器:966个ML任务、8500+论文任你选
  6. RHEL5.4在线调整磁盘分区大小
  7. ajax接收到的数据是一个页面的代码的原因
  8. 一加功耗dump开关_一加5/5TFlyme8 9.11.14 支持功能一览
  9. 13penrose广义逆矩阵(I)
  10. loadrunner 测试 html5,Loadrunner压力测试工具使用教程
  11. python程序设计课程设计二级减速器_二级减速器的课程设计
  12. python获取股票分时数据_AkShare-股票数据-分时数据
  13. Revertable STFT
  14. 计算机毕业设计Android的计算器app设计(源码+系统+mysql数据库+Lw文档)
  15. 【稳定性day7】mPaaS - 蚂蚁金服高可用的产品化之路
  16. 路由在电话网和计算机网中的区别,计算机猫和路由器之间有什么区别
  17. idea git使用
  18. python实现微信自动加群_为Python开发人员提供实时代码片段,Kite获1700万美元A轮融资...
  19. 2019年几大主流的前端框架(UI/JS)框架
  20. 2021杭电计算机考研数一英一408专业课考研经验贴

热门文章

  1. 公众号菜单添加超链接
  2. Unity基本操作学习
  3. 甘特图控件DHTMLX Gantt教程:用PHP:Laravel实现Gantt(上)
  4. fmr 收音机源代码相关分
  5. 简易BadUSB,攻击效果不简单
  6. UML图绘制(四)-----部署图的画法
  7. 骨传导蓝牙耳机效果哪个好、高品质骨传导耳机推荐
  8. pycharm HfArgumentParser ArgumentParser 参数设置 以及Debug
  9. base64格式图片转换成二进制流并生成图片文件
  10. 翟菜花:一个响指拉开百亿营收,灭霸的手套上镶满明星产品