开发者学堂课程【Spring Security知识精讲与实战演示(二):注销功能】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/731/detail/13042
注销功能
退出登录即注销操作,找到退出操作的按钮。
登录后台管理系统,输入 xiaoma 登录,成功后可以看到如下
界面右上方有一个头像点击会出现弹窗,有修改密码和注销。
修改密码非常简单,只需要更新语句,但是一般在生活中用到修改密码时会提示先输入现有的密码,如果现有的密码与数据库中匹配成功才能修改,避免恶意修改。
点击注销按钮后显示404无法找到。
在工程中找到刚才的页面,页面在 webapp 中的 header.jsp,可以看到注销,注销上有logout,之前配置文件时在 spring-security.xml 中配置过退出登录相关的地址,logout的地址就是/logout,成功之后就会跳转到/login.jsp。
都没有问题那么为什么会出现404呢?spring-security.xml 中的<!--去掉csrf拦截的过滤器-->
<!--<security:csrf disabled=”true”/>-->
现在csrf是开启的状态,如果现在打开,就可以正常退出,取消掉代码注释:
<!--去掉csrf拦截的过滤器-->
<security:csrf disabled=”true”/>
</security:http>
刷新后再来登录后台管理系统,点击注销就会发现成功,但是是否真正成功了呢?可以验证是否可以跳转首页,在网址上输入/login.jsp,发现无法跳转证明真正注销。
上述的操作取消了注释,再加上注释,报错404是因为现在开启了csrf拦截,此时logout处理器只能使用post方式请求,必须修改为post,在header.jsp中的注销代码下添加
<form action = “${pageContext.request.contextPath}/logout” method=”post”>
<security:csrfInput/>
<input type=”submit” value=”
注销”>
然后将代码注释掉:
<%--<a href=”${pageContext.request.contextPath}/logout”
class=”btn btn-default btn-flat”>
注销</a>--%>
现在已经将请求方式改为了 post 请求,再来刷新,再次登录 xiaoma,登录后点击注销操作,再次验证访问首页无法跳转,真正注销。
以上就完成了注销操作,注意:一旦开启了csrf防护功能,logout 处理器便只支持POST请求方式。