用户访问情况记录
This commit is contained in:
@@ -19,11 +19,9 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
public class InterceptorConfig implements WebMvcConfigurer {
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(new MultipleSubmitFilter()).addPathPatterns("/*");
|
||||
registry.addInterceptor(new MultipleSubmitFilter()).addPathPatterns("/**");
|
||||
registry.addInterceptor(new VisitorRecord()).addPathPatterns("/**");
|
||||
registry.addInterceptor(authenticationFilter()).addPathPatterns("/**");
|
||||
|
||||
// visitor 输出信息杂乱 暂时放弃使用
|
||||
// registry.addInterceptor(new VisitorRecord()).addPathPatterns("/*");
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -31,11 +29,11 @@ public class InterceptorConfig implements WebMvcConfigurer {
|
||||
return new AuthenticationFilter();
|
||||
}
|
||||
|
||||
// // session listener register bean
|
||||
// @Bean
|
||||
// public ServletListenerRegistrationBean<SessionListener> servletListenerRegistrationBean() {
|
||||
// ServletListenerRegistrationBean<SessionListener> slrBean = new ServletListenerRegistrationBean<SessionListener>();
|
||||
// slrBean.setListener(new SessionListener());
|
||||
// return slrBean;
|
||||
// }
|
||||
@Bean
|
||||
public ServletListenerRegistrationBean<SessionListener> servletListenerRegistrationBean() {
|
||||
// session listener register bean
|
||||
ServletListenerRegistrationBean<SessionListener> slrBean = new ServletListenerRegistrationBean<SessionListener>();
|
||||
slrBean.setListener(new SessionListener());
|
||||
return slrBean;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,16 @@ public class AuthenticationFilter implements HandlerInterceptor {
|
||||
path = path.replaceAll("/+", "/");
|
||||
int indexOf = path.indexOf("/", 1);
|
||||
String rootPath = indexOf == -1 ? path : path.substring(0, indexOf);
|
||||
String jwtStr = request.getHeader("Authorization");
|
||||
if (jwtStr != null && !jwtStr.isEmpty() && !jwtUtil.isTokenExpired(jwtStr)) {
|
||||
// 已登录 记录当前email
|
||||
request.getSession().setAttribute("email", jwtUtil.getUsernameFromToken(jwtStr));
|
||||
}
|
||||
// 不需要鉴权的路径
|
||||
if (!USER_PREFIX.equals(rootPath.toLowerCase()) && !ADMIN_PREFIX.equals(rootPath.toLowerCase())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
String jwtStr = request.getHeader("Authorization");
|
||||
if (jwtStr == null || jwtStr.isEmpty()) {
|
||||
return writeResponse(ResponseEnum.HAVE_NOT_LOG_IN, response, request);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package cn.celess.blog.configuration.listener;
|
||||
|
||||
import cn.celess.blog.entity.User;
|
||||
import cn.celess.blog.util.RedisUserUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import javax.servlet.annotation.WebListener;
|
||||
@@ -17,20 +15,21 @@ import java.util.HashMap;
|
||||
* @Date: 2019/10/18 15:33
|
||||
* @Description: 监听session的情况
|
||||
*/
|
||||
@Log4j2
|
||||
@WebListener
|
||||
public class SessionListener implements HttpSessionListener {
|
||||
@Autowired
|
||||
RedisUserUtil redisUserUtil;
|
||||
@Autowired
|
||||
HttpServletRequest request;
|
||||
private static final Logger logger = LoggerFactory.getLogger(SessionListener.class);
|
||||
|
||||
@Override
|
||||
public void sessionCreated(HttpSessionEvent se) {
|
||||
// TODO : can move 'visit' api to here
|
||||
se.getSession().setAttribute("visitDetail", new HashMap<String, Integer>());
|
||||
// se.getSession().setMaxInactiveInterval(10);// 10s for debug
|
||||
logger.info("新增一个Session[{}]", se.getSession().getId());
|
||||
// 10s for debug
|
||||
// se.getSession().setMaxInactiveInterval(10);
|
||||
// log.info("新增一个Session[{}]", se.getSession().getId());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -39,12 +38,15 @@ public class SessionListener implements HttpSessionListener {
|
||||
HashMap<String, Integer> visitDetail = (HashMap<String, Integer>) se.getSession().getAttribute("visitDetail");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("ip => ").append(se.getSession().getAttribute("ip"));
|
||||
User user = redisUserUtil.get();
|
||||
if (visitDetail.size() == 0) {
|
||||
return;
|
||||
}
|
||||
sb.append("\t登录情况 => ");
|
||||
sb.append(user == null ? "游客访问" : user.getEmail());
|
||||
String email = (String) se.getSession().getAttribute("email");
|
||||
sb.append(email == null ? "游客访问" : email);
|
||||
visitDetail.forEach((s, integer) -> {
|
||||
sb.append("\n").append("Method:[").append(s.split(":")[1]).append("]\tTimes:[").append(integer).append("]\tPath:[").append(s.split(":")[0]).append("]");
|
||||
});
|
||||
logger.info(sb.toString());
|
||||
log.info(sb.toString());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user