springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)

  前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用自定义的登录界面,本文我们就来介绍下如何实现该操作。注意:本文是在入门案例代码的基础上演示的!

一、页面准备

我们准备如下相关的jsp页面

1.login.jsp页面

<%-- Created by IntelliJ IDEA. User: dengp Date: 2019/12/1 Time: 20:40 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>登录管理</h1> <form> 账号:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"><br> </form> <img src="img/a1.jpg"> </body> </html>

2.home.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>home界面</h1> </body> </html>

3.其他页面

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(1)

在这里插入图片描述

二、SpringSecurity相关配置1.配置认证信息

配置登录和注销相关的信息

<security:http auto-config="true" use-expressions="true"> <!-- 拦截资源 pattern="/**" 拦截所有的资源 access="hasanyrole('role1')" 表示只有role1这个角色可以访问资源 --> <security:intercept-url pattern="/**" access="hasanyrole('role_user')"></security:intercept-url> <!-- 配置认证信息 login-page="/login.jsp" 自定义的登录页面 login-processing-url="/login" security中处理登录的请求 default-target-url="/home.jsp" 默认的跳转地址 authentication-failure-url="/failure.jsp" 登录失败的跳转地址 --> <security:form-login login-page="/login.jsp" login-processing-url="/login" default-target-url="/home.jsp" authentication-failure-url="/failure.jsp" /> <!-- 配置退出的登录信息 --> <security:logout logout-url="/logout" logout-success-url="/login.jsp" /> </security:http>

2.认证界面匿名访问

前面配置的

<security:intercept-url pattern="/**" access="hasanyrole('role_user')"></security:intercept-url>

会使登录界面不可访问,所以我们需要方法

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(2)

在这里插入图片描述

3.放过静态资源

同样的系统的 js css 等静态资源文件也会被对应的过滤器拦截,所以也需要方法

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(3)

在这里插入图片描述

4.登录测试

启动服务我们访问登录试试

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(4)

在这里插入图片描述

可以访问到,然后提交登录看看注意表单设置

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(5)

在这里插入图片描述

然后访问出现了403错误

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(6)

在这里插入图片描述

三、关闭csrf拦截

  上面我们在账号和角色都正确的情况下,登录后出现了 403错误,原因是因为 Csrf过滤器拦截了,那为什么系统提供的登录界面没问题呢?原因是如下

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(7)

在这里插入图片描述

在系统提供的登录表单中隐藏的有csrf相关的信息。这时我们可以关闭csrf过滤器,来实现登录工作

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(8)

在这里插入图片描述

重启服务再测试就可以了

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(9)

在这里插入图片描述

四、csrf防护

  上面我们通过关闭csrf过滤器实现了认证功能,但是系统将面临csrf攻击的风险,所以我们需要放开服务,同时也要能够完成认证。首先我们来看下CsrfFilter的源码

1.CsrfFilter源码查看

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(10)

在这里插入图片描述

this.requireCsrfProtectionMatcher.matches(request)方法

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(11)

在这里插入图片描述

通过 GET HEAD TRACE OPTIONS 提交的数据不会 csrf 验证

2.放开过滤器

前面关闭的我们需要放开

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(12)

在这里插入图片描述

3.页面动态token

导入security标签

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(13)

在这里插入图片描述

在表单中使用,作用和下面的一致

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(14)

在这里插入图片描述

:ajax方式提交的时候使用

五、注销功能

在home.jsp中添加注销链接

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(15)

在这里插入图片描述

点击后出现了404错误原因是:自定义的注销功能必须通过post方式提交才行,所以如下

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(16)

在这里插入图片描述

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(17)

在这里插入图片描述

出现这个原因是 csrf的原因,加标签即可

springsecurity怎么设置登录跳转(SpringSecurity实现自定义登录界面)(18)

在这里插入图片描述

搞定~

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页