前言

众所周知在spring boot内,设置session过期时间只需在application.properties内添加server.session.timeout配置即可。在整合shiro时发现,server.session.timeout设置为7200,但未到2小时就需要重新登录,后来发现是shiro的session已经过期了,shiro的session过期时间并不和server.session.timeout一致,目前是采用filter的方式来进行设置。
ShiroSessionFilter
/**
* 通过拦截器设置shiroSession过期时间
* @author yangwk
*/
public class ShiroSessionFilter implements Filter {
private static Logger logger = LoggerFactory.getLogger(ShiroSessionFilter.class);
public List<String> excludes = new ArrayList<String>();
private long serverSessionTimeout = 180000L;//ms
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException {
if(logger.isDebugEnabled()){
logger.debug("shiro session filter is open");
}
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
if(handleExcludeURL(req, resp)){
filterChain.doFilter(request, response);
return;
}
Subject currentUser = SecurityUtils.getSubject();
if(currentUser.isAuthenticated()){
currentUser.getSession().setTimeout(serverSessionTimeout);
}
filterChain.doFilter(request, response);
}
private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) {
if (excludes == null || excludes.isEmpty()) {
return false;
}
String url = request.getServletPath();
for (String pattern : excludes) {
Pattern p = Pattern.compile("^" + pattern);
Matcher m = p.matcher(url);
if (m.find()) {
return true;
}
}
return false;
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
if(logger.isDebugEnabled()){
logger.debug("shiro session filter init~~~~~~~~~~~~");
}
String temp = filterConfig.getInitParameter("excludes");
if (temp != null) {
String[] url = temp.split(",");
for (int i = 0; url != null && i < url.length; i++) {
excludes.add(url[i]);
}
}
String timeout = filterConfig.getInitParameter("serverSessionTimeout");
if(StringUtils.isNotBlank(timeout)){
this.serverSessionTimeout = NumberUtils.toLong(timeout,1800L)*1000L;
}
}
@Override
public void destroy() {}
}
注册filter
在被@Configuration注解标注的类内注册ShiroSessionFilter。
@Value("${server.session.timeout}")
private String serverSessionTimeout;
@Bean
public FilterRegistrationBean shiroSessionFilterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new ShiroSessionFilter());
filterRegistrationBean.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
filterRegistrationBean.setEnabled(true);
filterRegistrationBean.addUrlPatterns("/*");
Map<String, String> initParameters = Maps.newHashMap();
initParameters.put("serverSessionTimeout", serverSessionTimeout);
initParameters.put("excludes", "/favicon.ico,/img/*,/js/*,/css/*");
filterRegistrationBean.setInitParameters(initParameters);
return filterRegistrationBean;
}
这样当每次请求时,如果用户已登录,就重新设置shiro session有效期,从而和server session保持了一致。
总结
以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
# spring
# session
# shiro
# boot
# springboot
# Shiro中session超时页面跳转的处理方式
# spring boot整合redis实现shiro的分布式session共享的方法
# Spring Boot集成Shiro并利用MongoDB做Session存储的方法详解
# Shiro+Redis实现登录次数冻结的示例
# springboot整合shiro登录失败次数限制功能的实现代码
# SpringBoot+Shiro学习之密码加密和登录失败次数限制示例
# Shiro实现session限制登录数量踢人下线功能
# 只需
# 有一定
# 时就
# 这篇文章
# 谢谢大家
# 设置为
# 众所周知
# 未到
# 拦截器
# 有疑问
# long
# ArrayList
# serverSessionTimeout
# ms
# gt
# List
# lt
# LoggerFactory
# getLogger
# logger
相关文章:
网站制作公司排行榜,四大门户网站排名?
潮流网站制作头像软件下载,适合母子的网名有哪些?
宿州网站制作公司兴策,安徽省低保查询网站?
如何快速搭建自助建站会员专属系统?
建站主机选购指南:核心配置与性价比推荐解析
寿县云建站:智能SEO优化与多行业模板快速上线指南
,石家庄四十八中学官网?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何用PHP快速搭建CMS系统?
c# await 一个已经完成的Task会发生什么
,有什么在线背英语单词效率比较高的网站?
高端云建站费用究竟需要多少预算?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何自定义建站之星模板颜色并下载新样式?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何选择美橙互联多站合一建站方案?
制作农业网站的软件,比较好的农业网站推荐一下?
动图在线制作网站有哪些,滑动动图图集怎么做?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何通过云梦建站系统实现SEO快速优化?
如何通过cPanel快速搭建网站?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何彻底卸载建站之星软件?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何确保西部建站助手FTP传输的安全性?
如何制作算命网站,怎么注册算命网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
中山网站制作网页,中山新生登记系统登记流程?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
如何获取PHP WAP自助建站系统源码?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站VPS能否同时实现高效与安全翻墙?
湖北网站制作公司有哪些,湖北清能集团官网?
如何在建站主机中优化服务器配置?
常州企业网站制作公司,全国继续教育网怎么登录?
建站为何优先选择香港服务器?
如何获取上海专业网站定制建站电话?
建站之星如何修改网站生成路径?
移民网站制作流程,怎么看加拿大移民官网?
建站之星代理商如何保障技术支持与售后服务?
如何在阿里云部署织梦网站?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何选择高效可靠的多用户建站源码资源?
如何在万网自助建站平台快速创建网站?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
制作门户网站的参考文献在哪,小说网站怎么建立?
广州营销型建站服务商推荐:技术优势与SEO优化解析
*请认真填写需求信息,我们会在24小时内与您取得联系。