SpringBoot2.x設(shè)置Session失效時間及失效跳轉(zhuǎn)方式
更新時間:2022年03月17日 11:07:13 作者:奇
這篇文章主要介紹了SpringBoot2.x設(shè)置Session失效時間及失效跳轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
設(shè)置Session失效時間及失效跳轉(zhuǎn)
#Session超時時間設(shè)置,單位是秒,默認是30分鐘 ?server.servlet.session.timeout=10
然而并沒有什么用,因為SpringBoot在TomcatServletWebServerFactory代碼中寫了這個
? ? private long getSessionTimeoutInMinutes() { ? ? ? ? Duration sessionTimeout = this.getSession().getTimeout(); ? ? ? ? return this.isZeroOrLess(sessionTimeout) ? 0L : Math.max(sessionTimeout.toMinutes(), 1L); ? ? }
如果說某些人看不懂 Duration 這個類是什么,我不推薦你接著看下去了,因為沒有什么幫助。
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默認的提交地址 ? ? ? ? ? ? ? ? ? ? .successHandler(coreqiAuthenticationSuccessHandler) //登錄成功以后要用我們自定義的登錄成功處理器,不用Spring默認的。 ? ? ? ? ? ? ? ? ? ? .failureHandler(coreqiAuthenticationFailureHandler) //自己體會把 ? ? ? ? ? ? ? ? .and() ? ? ? ? ? ? ? ? .sessionManagement() ? ? ? ? ? ? ? ? ? ? .invalidSessionUrl("session/invalid") ? ?//session過期后跳轉(zhuǎn)的URL ? ? ? ? ? ? ? ? .and() ? ? ? ? ? ? ? ? .authorizeRequests() ? ?//對授權(quán)請求進行配置 ? ? ? ? ? ? ? ? ? ? .antMatchers("/coreqi-signIn.html","/code/image","/session/invalid").permitAll() //指定登錄頁面不需要身份認證 ? ? ? ? ? ? ? ? ? ? .anyRequest().authenticated() ?//任何請求都需要身份認證 ? ? ? ? ? ? ? ? ? ? .and().csrf().disable() ? ?//禁用CSRF ? ? ? ? ? ? ? ? .apply(smsCodeAuthenticationSecurityConfig); ? ? ? ? ? ? //FilterSecurityInterceptor 整個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過期時間 @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; } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼
這篇文章主要介紹了詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11Java實現(xiàn)帶有權(quán)重隨機算法的示例詳解
這篇文章主要為大家詳細介紹了Java如何實現(xiàn)帶有權(quán)重隨機算法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起學習一下2023-10-10