第一种方式:使用shiro配置:
在shiro config中配置:
@Bean(name = "sessionManager")
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// 设置session过期时间3600s
sessionManager.setGlobalSessionTimeout(3600000L);
return sessionManager;
}
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setSessionManager(sessionManager());
return securityManager;
}
第二种方式:使用内置tomcat容器配置:
在application.properties配置:
#session过期时间(单位秒) 默认1800s(30min)
#设置小于60秒,则会默认取1分钟
#实际过期时间为秒数对分钟取整,比如设置2000,则 2000s/60=33min,33min*60=1980s,实际过期时间为1980s
server.session.timeout=3600
测试session过期时间:
//获取当前的用户
Subject subject = SecurityUtils.getSubject();
//封装用户的登录数据
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
UserEntity user = userService.queryUserByName(token.getUsername());
try {
subject.login(token); //执行登录的方法,如果没有异常就说明ok
Subject currentSubject = SecurityUtils.getSubject();
Session session = currentSubject.getSession();
session.setAttribute("loginUser", user);
log.info("Shiro-Session过期时间:" + session.getTimeout());
return Response.of(true, HttpStatus.OK.value(), "登录成功!");
} catch (UnknownAccountException e) { //用户名不存在
return Response.of(false, HttpStatus.NON_AUTHORITATIVE_INFORMATION.value(), "该用户不存在!");
} catch (IncorrectCredentialsException e) { //密码不存在
return Response.of(false, HttpStatus.NON_AUTHORITATIVE_INFORMATION.value(), "密码错误!");
}