前言

創新互聯是專業的文縣網站建設公司,文縣接單;提供成都網站建設、做網站,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行文縣網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
眾所周知在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保持了一致。
總結
以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對創新互聯的支持。
本文題目:springboot實戰教程之shirosession過期時間詳解
瀏覽地址:http://www.yijiale78.com/article44/gddiee.html
成都網站建設公司_創新互聯,為您提供網站收錄、營銷型網站建設、動態網站、ChatGPT、做網站、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯