Spring Security 4 退出 示例(带源码)
来源:互联网 发布:哪个软件有汉仪丫丫体 编辑:程序博客网 时间:2024/04/30 23:32
上一篇: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程序退出用户,同时对浏览器返回按钮也有效。
当然在视图中,你应该提供一个退出链接来退出。类似如下:
<%@ 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"%><html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Admin page</title></head><body> Dear <strong>${user}</strong>, Welcome to Admin Page. <a href="<c:url value="/logout" />">Logout</a></body></html>
你仅仅需要在你的controller中映射 /logou 链接
@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)。
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@EnableWebSecuritypublic 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配置为:
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd"> <http auto-config="true" > <intercept-url pattern="/" access="hasRole('USER')" /> <intercept-url pattern="/home" access="hasRole('USER')" /> <intercept-url pattern="/admin**" access="hasRole('ADMIN')" /> <intercept-url pattern="/dba**" access="hasRole('ADMIN') and hasRole('DBA')" /> <form-login login-page="/login" username-parameter="ssoId" password-parameter="password" authentication-failure-url="/Access_Denied" /> </http> <authentication-manager > <authentication-provider> <user-service> <user name="bill" password="abc123" authorities="ROLE_USER" /> <user name="admin" password="root123" authorities="ROLE_ADMIN" /> <user name="dba" password="root123" authorities="ROLE_ADMIN,ROLE_DBA" /> </user-service> </authentication-provider> </authentication-manager> </beans:beans>
部署 & 启动
用配置的amind账户登录
点击退出链接
点击 浏览器 后退按钮 仍然会被拦截在登录界面
本文结束。下一篇文章将介绍根据Spring Security 的标签,根据 登录用户的角色来显示或者隐藏 jsp或者view的一部分。
源码下载: http://websystique.com/?smd_process_download=1&download_id=1375
- Spring Security 4 退出 示例(带源码)
- 运行Spring-security自带的示例
- Spring Security 4 Hello World 基于注解 和 XML 例子(带源码)
- Spring Security 4 自定义登录表单 注解和XML例子(带源码)
- Spring Security 4 基于角色的登录例子(带源码)
- Spring Security 4 Hibernate整合 注解和xml例子(带源码)
- Spring Security 4 整合Hibernate Bcrypt密码加密(带源码)
- Spring Security 4 整合Hibernate 实现持久化登录验证(带源码)
- Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全(带源码)
- Spring Security 4 基于角色的登录例子(带源码)
- Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全(带源码)
- MyBatis-Spring MVC 整合示例(带源码)
- spring security 示例
- spring security 示例
- Spring Security 简单示例
- spring security 如何安全退出
- Spring Security-/logout 退出404
- spring security 自定义退出策略
- Java 关键字作用备忘
- PMP认证仅是基础,易迪思项目管理学院八大实战课程为您服务
- npm使用介绍
- 计算机网络——运输层
- 搭建vs2010 boost开发环境
- Spring Security 4 退出 示例(带源码)
- 编写高质量的代码——从命名入手
- android 中aidl
- Tomcat启动报 unrecognized windows sockets error: 0: JVM_Bind解决方法
- py2exe打包Python程序
- 《java入门第一季》之面向对象面试题
- 大数据学习资源汇总
- 设计模式之Strategy模式(策略模式)
- 定时清理日志