spring security起步四:退出登录配置以及logout属性详解

来源:互联网 发布:软件开发学费 编辑:程序博客网 时间:2024/05/01 04:51

用户退出登录实质是使当前登录用户的session失效的操作。一般来说,用户退出后,将会被重定向到站点的非安全保护页,比如登录页面.

用户退出功能实现

增加hader.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title></title></head><body>    <c:url value="/logout" var="logoutUrl"/>    <a href="${logoutUrl }">退出系统</a></body></html>

引入至index.jsp

<body>    <%@include file="header.jsp" %>    ...    ...    ...

配置spring security logout 属性

spring-security.xml

......<http auto-config="true" use-expressions="true">    <intercept-url pattern="/*" access="hasRole('ROLE_USER')" />    <form-login login-page="/loginPage" login-processing-url="/login"        always-use-default-target="true" default-target-url="/welcome"        authentication-failure-url="/loginPage?error=error" />    <logout logout-url="/logout" logout-success-url="/loginPage" invalidate-session="true"/>    <csrf disabled="true" /></http>......

现在我们启动项目,登录成功后可以看到如下页面
这里写图片描述
点击退出登录,会返回到登录页面。

logout 属性详解

  1. logout-url LogoutFilter要读取的url,也就是指定spring security拦截的注销url
  2. logout-success-url 用户退出后要被重定向的url
  3. invalidate-session 默认为true,用户在退出后Http session失效
  4. success-handler-ref 对一个LogoutSuccessHandler的引用,用来自定义退出成功后的操作

这里需要注意的一点是,spring security 3.x默认的注销拦截url为/j_spring_security_logout,而4.x则默认使用/logout

spring security退出功能相关类

spring security实现注销功能涉及的三个核心类为LogoutFilter,LogoutHandler,LogoutSuccessHandler

LoginFilter是实现注销功能的过滤器,默认拦截/logout或者logout属性logout-url指定的url

LogoutHandler接口定义了退出登录操作的方法

void logout(HttpServletRequest request, HttpServletResponse response,            Authentication authentication);

LogoutSuccessHandler接口定义了注销之后的操作方法

void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,            Authentication authentication) throws IOException, ServletException;

它们之间的类结构图:
这里写图片描述

spring security退出功能实现流程

spring security在实现注销功能时,大致流程如下
1. 使得HTTP session失效(如果invalidate-session属性被设置为true);
2. 清除SecurityContex(真正使得用户退出)
3. 将页面重定向至logout-success-url指明的URL。

源码下载地址https://github.com/SmallBadFish/spring_security_demo/archive/0.2.0-logout.zip

0 0
原创粉丝点击