<返回更多

SpringSecurity实现自定义登录界面

2021-12-06    波哥带你学Java
加入收藏

 前面通过入门案例介绍,我们发现在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.配置认证信息

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

<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实现自定义登录界面

 

在这里插入图片描述

3.放过静态资源

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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

4.登录测试

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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


然后访问出现了403错误

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

三、关闭csrf拦截

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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

重启服务再测试就可以了

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

四、csrf防护

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

1.CsrfFilter源码查看

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


this.requireCsrfProtectionMatcher.matches(request)方法

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


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

2.放开过滤器

前面关闭的我们需要放开

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

3.页面动态token

导入security标签

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述


:ajax方式提交的时候使用

五、注销功能

在home.jsp中添加注销链接

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

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

SpringSecurity实现自定义登录界面

 

在这里插入图片描述

搞定~

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>