自定义登录页面

前面无论是使用默认配置,还是自定义配置类,都是使用的springboot-security自带的登录页面,自带的登录页面在这个版本虽然设计的非常不错,但是在实际开发中,我们通常还是使用自己的登录页面。下面来写一个非常简单的登录页面:

这个页面只有填写用户名和密码的地方,然后就是一个form表单提交,没有任何其他内容。特别注意!!这里页面虽然引入了thymeleaf模板,但是没有使用thymeleaf的任何标签属性,使用的是原生的html标签。继续下面,然后是定义登录页面的路径:

这样登录页面就添加完成了。

修改配置类

在配置类中添加自定义登录页面很简单,定义登录页面链接即可:

配置完成后,启动项目,访问登录页面,可以看到这样一个错误:

显示重定向次数过多。原来前面我们授权配置的时候,所有自定义的路径在未登录的情况下,都会重定向到登录页面,现在登录路径也是自定义的,所以它一直在自我重定向。登录路径本身要配置成不需要授权就能访问的路径才合理。配置方式很简单,只需要加上一个 permitAll 方法即可:

现在重启项目,访问登录可以正常访问,输入账号也可以正常访问了!

csrf配置

上面的页面和配置类修改好了以后,输入账号登录,却发现登录一直不成功,总是会跳转到登录页面。这是什么原因呢?上面的提到了页面使用的是原生的html标签,没有使用thymeleaf模板的属性。先说这种原生的情况,之所以登录不成功,原因是Spring Security默认是开启CSRF的,所以需要请求中包含CSRF的token信息,在其官方文档中,提供了在form中嵌入一个hidden标签来获取token信息,其原理是,hidden标签使用了Spring Security提供的标签,即${_csrf.parameterName}、${_csrf.token}, 后台页面渲染过程中,将此标签解所对应的值解析出来,这样,我们的form表单,就嵌入了Spring Security的所需的token信息,在后续的提交登录请求时,就不会出现没有CSRF token的异常。做法如下:

这时候登录,就发现可以成功。在springboot2.1.x版本下,还有第二种更好的解决方案,就是使用thymeleaf模板的form标签属性:

在form标签中,使用th:action属性,这样会在表单中默认添加一个hidden的input标签,效果和第一种解决方式类似,查看源码,就可以看到:

另外,还有一个解决办法是,通过关闭CSRF来解决,这个几乎在任何场景中都能解决这个问题(上面这个解决方案,可能在某些渲染模板不能解析出来token值,不过可以通过后台程序来获取token值,然后自己定义变量来渲染到form中,这个也是可以的)。具体的做法是通过修改配置文件来关闭,我这里使用的是SpringBoot开发的项目,配置文件直接写在配置类中,通过.csrf().disable()来关闭。不过这种方案,会迎来CSRF攻击,不建议在生产环境中使用,如果系统对外界做了隔离,这样做也是可以的。大部分的生产环境采用的也多是这种方案。

上面三种解决方案都可以解决登录不成功的问题。

配置登录成功后的默认页面

现在security登录成功后默认会跳转到一个路径,这个路径就是登录链接去掉后面的/login,这个默认跳转也是可以配置的:

然后再把默认页面改为/home路径:

现在我们登录成功,跳转的就是/home:

配置登出

除了登录,security还有自带的登出,即退出系统功能,默认路径就是/logout。我们可以在home页面中加一个登出操作:

退出后,默认进入的自然是登录页面,但是浏览器路径上面,要显示出刚才是退出系统了。所以应该显示的路径是/login?logout,但是由于这个路径没有授权,会再次跳转到登录页面,显示的也就还是/login,所以我们对登出也要进行授权:

现在显示的就是正常的退出后的路径:

代码地址 : https://gitee.com/blueses/spring-boot-security 03

SpringBootSecurity学习(03)网页版登录添加自定义登录页面的更多相关文章

  1. 移动端ios网页版收起键盘导致页面空白解决办法

    失焦的时候把窗口滚动位置设置到(0,0)就行了 <input type="text" onblur="window.scrollTo(0, 0);"> ...

  2. SpringBootSecurity学习(12)前后端分离版之简单登录

    前后端分离 前面讨论了springboot下security很多常用的功能,其它的功能建议参考官方文档学习.网页版登录的形式现在已经不是最流行的了,最流行的是前后端分离的登录方式,前端单独成为一个项目 ...

  3. h5 网页版的微博微信QQ登录

    一:微博 1,先说微博吧,首先你的去http://open.weibo.com/wiki/先注册账号,通过验证审核.然后的创建网页应用.微博审核不通过的原因就是域名和网站地址,一定要按实际写的.一定要 ...

  4. CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷

    CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷 CROW-5 WEB APP引擎商业计划书(HTML5方向)

  5. 用requests登录微信网页版,并接收发送消息

    首先,网页版微信登录大致分为以下几个流程(都是大家可以通过抓包得到): 1.登陆主页后,会生成一个UUID,这是个用户标识,在后面请求二维码会用到 def get_uuid(self): '''获取u ...

  6. 利用 JavaScript SDK 部署网页版“Facebook 登录”

    facebook开发者平台https://developers.facebook.com/ 利用 JavaScript SDK 部署网页版“Facebook 登录” 通过采用 Javascript 版 ...

  7. Java 语言实现简易版扫码登录

    基本介绍 相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信.支付宝等.最近学习了一下扫码登录的原理,感觉蛮有趣的,于是自己实现了一个简易版扫码登录的 Demo,以此记录一下学 ...

  8. 微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...

  9. php微信开放平台--第三方网页微信扫码登录(OAuth2.0)

    第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提 ...

随机推荐

  1. SSH密码和秘钥认证原理

    SSH登录方式主要分为两种: 1. 用户名密码验证方式 说明: (1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户: (2) 用户会根据服务器发来的公钥对密码进行加密: (3) 加密后的信 ...

  2. ModelAndViewContainer、ModelMap、Model详细介绍【享学Spring MVC】

    每篇一句 一个开源的技术产品做得好不好,主要是看你能解决多少非功能性问题(因为功能性问题是所有产品都能够想到的) 前言 写这篇文章非我本意,因为我觉得对如题的这个几个类的了解还是比较基础且简单的一块内 ...

  3. Oracle - 获取当前周别函数

    CREATE OR REPLACE FUNCTION GET_WEEK (V_RQ in DATE) return varchar2 as str varchar2(); str1 varchar2( ...

  4. This probably means that Tcl wasn't installed properly.

    报错 D:/Anaconda3/tcl/tcl8.6/init.tcl: version conflict for package "Tcl": have 8.6.8, need ...

  5. P3355 骑士共存问题 二分建图 + 当前弧优化dinic

    P3355 骑士共存问题 题意: 也是一个棋盘,规则是“马”不能相互打到. 思路: 奇偶点分开,二分图建图,这道题要注意每个点可以跑八个方向,两边都可以跑,所以边 = 20 * n * n. 然后di ...

  6. luogu- P1373 小a和uim之大逃离 DP 四维,其中一维记录差值

    P1373 小a和uim之大逃离: https://www.luogu.org/problemnew/show/P1373 题意: 在一个矩阵中,小A和小B轮流取数,小A可以从任意点先取,小B后取,最 ...

  7. codeforce #505D - Recovering BST 区间DP

    1025D 题意: 有一个递增序列,问能不能构建出一颗每条边的端点值都不互质的二叉排序树. 思路: 区间DP,但是和常见的区间DP不一样, 这里dp[i][j]表示的是区间[i,j]能否以i为根建立一 ...

  8. CF1028D Order book 思维

    Order book time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  9. codeforces 733D Kostya the Sculptor(贪心)

    Kostya is a genial sculptor, he has an idea: to carve a marble sculpture in the shape of a sphere. K ...

  10. 弹幕制作canvas方法,文字直播和聊天

    今天要做体育文字直播的项目,类似这样: 文字不断循环显示,我这里找到了一个网上的写法,分析后并贴在这里,并且封装成了jquery barrager方法,很是方便,分析了下原理,是刷新canvas 画布 ...