SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式
更新時(shí)間:2022年03月17日 11:07:13 作者:奇
這篇文章主要介紹了SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)
#Session超時(shí)時(shí)間設(shè)置,單位是秒,默認(rèn)是30分鐘 ?server.servlet.session.timeout=10
然而并沒有什么用,因?yàn)镾pringBoot在TomcatServletWebServerFactory代碼中寫了這個(gè)
? ? private long getSessionTimeoutInMinutes() { ? ? ? ? Duration sessionTimeout = this.getSession().getTimeout(); ? ? ? ? return this.isZeroOrLess(sessionTimeout) ? 0L : Math.max(sessionTimeout.toMinutes(), 1L); ? ? }
如果說某些人看不懂 Duration 這個(gè)類是什么,我不推薦你接著看下去了,因?yàn)闆]有什么幫助。
Session失效后如何跳轉(zhuǎn)到Session失效地址
package cn.coreqi.security.config;? import cn.coreqi.security.Filter.SmsCodeFilter; import cn.coreqi.security.Filter.ValidateCodeFilter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.password.NoOpPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ? ? @Autowired ? ? private AuthenticationSuccessHandler coreqiAuthenticationSuccessHandler; ? ? @Autowired ? ? private AuthenticationFailureHandler coreqiAuthenticationFailureHandler; ? ? @Autowired ? ? private SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig; ? ? @Bean ? ? public PasswordEncoder passwordEncoder(){ ? ? ? ? return NoOpPasswordEncoder.getInstance(); ? ? } ? ? @Override ? ? protected void configure(HttpSecurity http) throws Exception { ? ? ? ? ValidateCodeFilter validateCodeFilter = new ValidateCodeFilter(); ? ? ? ? validateCodeFilter.setAuthenticationFailureHandler(coreqiAuthenticationFailureHandler); ? ? ? ? SmsCodeFilter smsCodeFilter = new SmsCodeFilter(); ? ? ? ? //http.httpBasic() ? ?//httpBasic登錄 BasicAuthenticationFilter ? ? ? ? http.addFilterBefore(smsCodeFilter, UsernamePasswordAuthenticationFilter.class) ? ?//加載用戶名密碼過濾器的前面 ? ? ? ? ? ? ? ? .addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class) ? ?//加載用戶名密碼過濾器的前面 ? ? ? ? ? ? ? ? .formLogin() ? ?//表單登錄 UsernamePasswordAuthenticationFilter ? ? ? ? ? ? ? ? ? ? .loginPage("/coreqi-signIn.html") ?//指定登錄頁面 ? ? ? ? ? ? ? ? ? ? //.loginPage("/authentication/require") ? ? ? ? ? ? ? ? ? ? .loginProcessingUrl("/authentication/form") //指定表單提交的地址用于替換UsernamePasswordAuthenticationFilter默認(rèn)的提交地址 ? ? ? ? ? ? ? ? ? ? .successHandler(coreqiAuthenticationSuccessHandler) //登錄成功以后要用我們自定義的登錄成功處理器,不用Spring默認(rèn)的。 ? ? ? ? ? ? ? ? ? ? .failureHandler(coreqiAuthenticationFailureHandler) //自己體會(huì)把 ? ? ? ? ? ? ? ? .and() ? ? ? ? ? ? ? ? .sessionManagement() ? ? ? ? ? ? ? ? ? ? .invalidSessionUrl("session/invalid") ? ?//session過期后跳轉(zhuǎn)的URL ? ? ? ? ? ? ? ? .and() ? ? ? ? ? ? ? ? .authorizeRequests() ? ?//對(duì)授權(quán)請(qǐng)求進(jìn)行配置 ? ? ? ? ? ? ? ? ? ? .antMatchers("/coreqi-signIn.html","/code/image","/session/invalid").permitAll() //指定登錄頁面不需要身份認(rèn)證 ? ? ? ? ? ? ? ? ? ? .anyRequest().authenticated() ?//任何請(qǐng)求都需要身份認(rèn)證 ? ? ? ? ? ? ? ? ? ? .and().csrf().disable() ? ?//禁用CSRF ? ? ? ? ? ? ? ? .apply(smsCodeAuthenticationSecurityConfig); ? ? ? ? ? ? //FilterSecurityInterceptor 整個(gè)SpringSecurity過濾器鏈的最后一環(huán) ? ? } }
? ? @GetMapping("/session/invalid") ? ? @ResponseStatus(code = HttpStatus.UNAUTHORIZED) ? ? public SimpleResponse sessionInvalid(){ ? ? ? ? String message = "session失效"; ? ? ? ? return new SimpleResponse(message); ? ? }
設(shè)置Session失效的幾種方式
如果是1.5.6版本
這里可以在application中加上bean文件
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.context.annotation.Bean; @SpringBootApplication public class DemoApplication {undefined public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } //設(shè)置session過期時(shí)間 @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return new EmbeddedServletContainerCustomizer() { public void customize(ConfigurableEmbeddedServletContainer container) { container.setSessionTimeout(7200);// 單位為S } }; } }
還可以設(shè)置
application.yml
server: port: 8081 servlet: session: timeout: 60s
@RestController public class HelloController {undefined @PostMapping("test") public Integer getTest(@RequestParam("nyy")String nn, HttpServletRequest httpServletRequest ){ HttpSession session = httpServletRequest.getSession(); session.setMaxInactiveInterval(60); int maxInactiveInterval = session.getMaxInactiveInterval(); long lastAccessedTime = session.getLastAccessedTime(); return maxInactiveInterval; } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼
這篇文章主要介紹了詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Java實(shí)現(xiàn)帶有權(quán)重隨機(jī)算法的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)帶有權(quán)重隨機(jī)算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10SpringMVC下實(shí)現(xiàn)Excel文件上傳下載
這篇文章主要為大家詳細(xì)介紹了SpringMVC下實(shí)現(xiàn)Excel文件上傳下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03