前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用自定义的登录界面,本文我们就来介绍下如何实现该操作。
注意:本文是在入门案例代码的基础上演示的!
我们准备如下相关的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>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>home界面</h1>
</body>
</html>
在这里插入图片描述
配置登录和注销相关的信息
<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>
前面配置的
<security:intercept-url pattern="/**" access="hasanyrole('role_user')"></security:intercept-url>
会使登录界面不可访问,所以我们需要方法
在这里插入图片描述
同样的系统的 js css 等静态资源文件也会被对应的过滤器拦截,所以也需要方法
在这里插入图片描述
启动服务我们访问登录试试
在这里插入图片描述
可以访问到,然后提交登录看看
注意表单设置
在这里插入图片描述
然后访问出现了403错误
在这里插入图片描述
上面我们在账号和角色都正确的情况下,登录后出现了 403错误,原因是因为 csrf过滤器拦截了,那为什么系统提供的登录界面没问题呢?原因是如下
在这里插入图片描述
在系统提供的登录表单中隐藏的有csrf相关的信息。这时我们可以关闭csrf过滤器,来实现登录工作
在这里插入图片描述
重启服务再测试就可以了
在这里插入图片描述
上面我们通过关闭csrf过滤器实现了认证功能,但是系统将面临csrf攻击的风险,所以我们需要放开服务,同时也要能够完成认证。首先我们来看下CsrfFilter的源码
在这里插入图片描述
this.requireCsrfProtectionMatcher.matches(request)方法
在这里插入图片描述
通过 GET HEAD TRACE OPTIONS 提交的数据不会 csrf 验证
前面关闭的我们需要放开
在这里插入图片描述
导入security标签
在这里插入图片描述
在表单中使用,作用和下面的一致
在这里插入图片描述
:ajax方式提交的时候使用
在home.jsp中添加注销链接
在这里插入图片描述
点击后出现了404错误原因是:自定义的注销功能必须通过post方式提交才行,所以如下
在这里插入图片描述
在这里插入图片描述
出现这个原因是 csrf的原因,加标签即可
在这里插入图片描述
搞定~