想定义过滤器 存储 shrio sesssion 信息
继承PathMatchingFilter 还需要实现 implements ActionFilter 方法吗
package io.nutz.nutzsite.common.shiro.filter;
import io.nutz.nutzsite.common.bean.OnlineSession;
import io.nutz.nutzsite.common.constant.ShiroConstants;
import io.nutz.nutzsite.common.shiro.session.OnlineSessionDAO;
import org.apache.shiro.web.filter.PathMatchingFilter;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* 同步Session数据到Db
*
* @author ruoyi
*/
@IocBean
public class SyncOnlineSessionFilter extends PathMatchingFilter {
@Inject
private OnlineSessionDAO onlineSessionDAO;
/**
* 同步会话数据到DB 一次请求最多同步一次 防止过多处理 需要放到Shiro过滤器之前
*/
@Override
protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
OnlineSession session = (OnlineSession) request.getAttribute(ShiroConstants.ONLINE_SESSION);
// 如果session stop了 也不同步
// session停止时间,如果stopTimestamp不为null,则代表已停止
if (session != null && session.getUserId() != null && session.getStopTimestamp() == null) {
onlineSessionDAO.syncToDb(session);
}
return true;
}
}