前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Security 4 退出 示例(带源码)

Spring Security 4 退出 示例(带源码)

作者头像
明明如月学长
发布2021-08-27 15:18:44
4920
发布2021-08-27 15:18:44
举报
文章被收录于专栏:明明如月的技术专栏

上一篇:Spring Security 4 自定义登录表单 注解和XML例子

下一篇:Spring Security 4 安全视图片段 使用标签(Spring Security 标签

原文地址:http://websystique.com/spring-security/spring-security-4-logout-example/

【已翻译文章,点击分类里面的spring security 4 】

【 翻译by 明明如月 QQ 605283073】

本文展示Spring Security程序退出用户,同时对浏览器返回按钮也有效。

当然在视图中,你应该提供一个退出链接来退出。类似如下:

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


    
    Admin page


    Dear ${user}, Welcome to Admin Page.
    ">Logout

你仅仅需要在你的controller中映射 /logou 链接

代码语言:javascript
复制
@RequestMapping(value="/logout", method = RequestMethod.GET)
public String logoutPage (HttpServletRequest request, HttpServletResponse response) {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if (auth != null){    
        new SecurityContextLogoutHandler().logout(request, response, auth);
    }
    return "redirect:/login?logout";//You can redirect wherever you want, but generally it's a good practice to show login screen again.
}

这里 首先我们在使用 SecurityContextHolder.getContext().getAuthentication() 之前校验该用户是否已经被验证过。

然后调用SecurityContextLogoutHandler().logout(request, response, auth)  来退出

logout 调用流程:

 1 将 HTTP Session 作废,解绑其绑定的所有对象。

 2 从SecurityContext移除Authentication 防止并发请求的问题。

 3 显式地清楚当前线程的上下文里的值。

在应用的其他地方不再需要处理 退出。

注意:你甚至都不需要在你的spring多添加任何配置(不管是基于注解还是基于xml)。

代码语言:javascript
复制
package com.websystique.springsecurity.configuration;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
 
     
    @Autowired
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("bill").password("abc123").roles("USER");
        auth.inMemoryAuthentication().withUser("admin").password("root123").roles("ADMIN");
        auth.inMemoryAuthentication().withUser("dba").password("root123").roles("ADMIN","DBA");
    }
     
    @Override
    protected void configure(HttpSecurity http) throws Exception {
       
      http.authorizeRequests()
        .antMatchers("/", "/home").permitAll()
        .antMatchers("/admin/**").access("hasRole('ADMIN')")
        .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
        .and().formLogin().loginPage("/login")
        .usernameParameter("ssoId").passwordParameter("password")
        .and().exceptionHandling().accessDeniedPage("/Access_Denied");
    }
}

在上述配置中并没有退出的处理。

上面的 配置对应的xml配置为:

代码语言:javascript
复制

其他的代码跟本系列文章提到的都是一样的。

部署 & 启动

下载本项目的完整代码。在Servlet 3.0 (Tomcat7/8)容器中构建和部署。

打开浏览器输入: http://localhost:8080/SpringSecurityCustomLogoutExample/

再访问  http://localhost:8080/SpringSecurityCustomLogoutExample/admin 将会被转到登录界面

用配置的amind账户登录

点击退出链接

点击 浏览器 后退按钮 仍然会被拦截在登录界面

本文结束。下一篇文章将介绍根据Spring Security 的标签,根据 登录用户的角色来显示或者隐藏 jsp或者view的一部分。

源码下载: http://websystique.com/?smd_process_download=1&download_id=1375

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/05/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 部署 & 启动
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档