SpringSecurity(六):Session(集群)管理和Logout

Security的用户认证信息默认是存储在session中的,对于session过期的时间,springboot的里默认的是30分钟。

当然也可以自己设置:

application.yml:

server:
  session:
    timeout: 7200  #最少是一分钟,就算比一分钟少也会默认转成一分钟,如果不设置默认为30分钟

security的session管理:



SessionManagementConfigurer的其他属性

	//默认的session认证策略:ChangeSessionIdAuthenticationStrategy,用来放置固定的会话攻击
	private final SessionAuthenticationStrategy DEFAULT_SESSION_FIXATION_STRATEGY = createDefaultSessionFixationProtectionStrategy();
	private SessionAuthenticationStrategy sessionFixationAuthenticationStrategy = this.DEFAULT_SESSION_FIXATION_STRATEGY;
	private SessionAuthenticationStrategy sessionAuthenticationStrategy;
	private SessionAuthenticationStrategy providedSessionAuthenticationStrategy;
	
	/**
	 * 无效的session策略:确定在{@code SessionManagementFilter}中提交和检测到无效会话ID时{@code SessionManagementFilter}的行为。
	 * 默认是重定向到invalidSessionUrl
	 */
	private InvalidSessionStrategy invalidSessionStrategy;
	
	/**
	 * 在{@code ConcurrentSessionFilter}中检测到过期的会话时,确定{@code ConcurrentSessionFilter}的行为。
	 */
	private SessionInformationExpiredStrategy expiredSessionStrategy;
	
	
	private List sessionAuthenticationStrategies = new ArrayList();
	
	/**
	 * 维护一个 SessionInformation 实例的注册表。
	 * 包括session的创建,刷新,删除获取等
	 */
	private SessionRegistry sessionRegistry;
	/**
	 * 最大session连接数
	 */
	private Integer maximumSessions;
	/**
	 * session过期跳转的url
	 */
	private String expiredUrl;
	/**
	 * 达到最大session值是否阻止登陆
	 */
	private boolean maxSessionsPreventsLogin;
	/**
	 * 指定Spring Security的各种会话创建策略。
	 * 默认是需要就创建
	 */
	private SessionCreationPolicy sessionPolicy = SessionCreationPolicy.IF_REQUIRED;
	
	/**
	 * 是否允许将session信息重写入url中。
	 * 默认是false,这样可以防止向外部域泄露信息。
	 */
	private boolean enableSessionUrlRewriting;
	/**
	 * session无效时候跳转的url
	 */
	private String invalidSessionUrl;
	/**
	 * session认证错误的url
	 */
	private String sessionAuthenticationErrorUrl;
	/**
	 * 认证失败的handler
	 */
	private AuthenticationFailureHandler sessionAuthenticationFailureHandler;
用户可以根据自己需求配置对应的策略和session失效时候的跳转


session的集群管理。这里使用的是redis

pom导入依赖

		
		
			org.springframework.session
			spring-session
		
		
		
			org.springframework.boot
			spring-boot-starter-data-redis
		

添加redis配置:最后的application.yml

spring:
  #mysql
  datasource:
    driver-class-name:  com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.31.26:3306/test?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
    username: root
    password: root
  #jpa
  jpa:
    hibernate:
      ddl-auto: update   #第一次是创建
    show-sql: true
  #spring session存储类型
  session:        
    store-type: REDIS
  #redis
  redis:
    host: 192.168.31.109
    port: 6379
    password: 123456

#session超时时间
server:
  session:
    timeout: 7200  #最少是一分钟,就算比一分钟少也会默认转成一分钟,如果不设置为30分钟

测试结果:




Logout功能

1.使当前session失效

2.消除与当前用户相关的remember-me记录

3.清空当前的SecurityContext

4.重定向到登录页


首页index.html





Insert title here


	

首页

退出

添加登出配置

			.logout()
				.logoutUrl("/logout")    //登出路径
				.logoutSuccessUrl("/login.html")    //登出成功跳转到登陆页面
				.deleteCookies("JSESSIONID")		//删除cookie
				.and()

测试过程略


源码地址:

https://gitee.com/mengcan/SpringSecurity.git



你可能感兴趣的:(SpringSecurity)