用户访问情况记录

This commit is contained in:
小海
2019-12-04 15:28:01 +08:00
parent a0eaddafec
commit 9a4a930426
3 changed files with 25 additions and 21 deletions

View File

@@ -19,11 +19,9 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
public class InterceptorConfig implements WebMvcConfigurer { public class InterceptorConfig implements WebMvcConfigurer {
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MultipleSubmitFilter()).addPathPatterns("/*"); registry.addInterceptor(new MultipleSubmitFilter()).addPathPatterns("/**");
registry.addInterceptor(new VisitorRecord()).addPathPatterns("/**");
registry.addInterceptor(authenticationFilter()).addPathPatterns("/**"); registry.addInterceptor(authenticationFilter()).addPathPatterns("/**");
// visitor 输出信息杂乱 暂时放弃使用
// registry.addInterceptor(new VisitorRecord()).addPathPatterns("/*");
} }
@Bean @Bean
@@ -31,11 +29,11 @@ public class InterceptorConfig implements WebMvcConfigurer {
return new AuthenticationFilter(); return new AuthenticationFilter();
} }
// // session listener register bean @Bean
// @Bean public ServletListenerRegistrationBean<SessionListener> servletListenerRegistrationBean() {
// public ServletListenerRegistrationBean<SessionListener> servletListenerRegistrationBean() { // session listener register bean
// ServletListenerRegistrationBean<SessionListener> slrBean = new ServletListenerRegistrationBean<SessionListener>(); ServletListenerRegistrationBean<SessionListener> slrBean = new ServletListenerRegistrationBean<SessionListener>();
// slrBean.setListener(new SessionListener()); slrBean.setListener(new SessionListener());
// return slrBean; return slrBean;
// } }
} }

View File

@@ -41,12 +41,16 @@ public class AuthenticationFilter implements HandlerInterceptor {
path = path.replaceAll("/+", "/"); path = path.replaceAll("/+", "/");
int indexOf = path.indexOf("/", 1); int indexOf = path.indexOf("/", 1);
String rootPath = indexOf == -1 ? path : path.substring(0, indexOf); 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())) { if (!USER_PREFIX.equals(rootPath.toLowerCase()) && !ADMIN_PREFIX.equals(rootPath.toLowerCase())) {
return true; return true;
} }
String jwtStr = request.getHeader("Authorization");
if (jwtStr == null || jwtStr.isEmpty()) { if (jwtStr == null || jwtStr.isEmpty()) {
return writeResponse(ResponseEnum.HAVE_NOT_LOG_IN, response, request); return writeResponse(ResponseEnum.HAVE_NOT_LOG_IN, response, request);
} }

View File

@@ -1,9 +1,7 @@
package cn.celess.blog.configuration.listener; package cn.celess.blog.configuration.listener;
import cn.celess.blog.entity.User;
import cn.celess.blog.util.RedisUserUtil; import cn.celess.blog.util.RedisUserUtil;
import org.slf4j.Logger; import lombok.extern.log4j.Log4j2;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.annotation.WebListener; import javax.servlet.annotation.WebListener;
@@ -17,20 +15,21 @@ import java.util.HashMap;
* @Date: 2019/10/18 15:33 * @Date: 2019/10/18 15:33
* @Description: 监听session的情况 * @Description: 监听session的情况
*/ */
@Log4j2
@WebListener @WebListener
public class SessionListener implements HttpSessionListener { public class SessionListener implements HttpSessionListener {
@Autowired @Autowired
RedisUserUtil redisUserUtil; RedisUserUtil redisUserUtil;
@Autowired @Autowired
HttpServletRequest request; HttpServletRequest request;
private static final Logger logger = LoggerFactory.getLogger(SessionListener.class);
@Override @Override
public void sessionCreated(HttpSessionEvent se) { public void sessionCreated(HttpSessionEvent se) {
// TODO : can move 'visit' api to here // TODO : can move 'visit' api to here
se.getSession().setAttribute("visitDetail", new HashMap<String, Integer>()); se.getSession().setAttribute("visitDetail", new HashMap<String, Integer>());
// se.getSession().setMaxInactiveInterval(10);// 10s for debug // 10s for debug
logger.info("新增一个Session[{}]", se.getSession().getId()); // se.getSession().setMaxInactiveInterval(10);
// log.info("新增一个Session[{}]", se.getSession().getId());
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -39,12 +38,15 @@ public class SessionListener implements HttpSessionListener {
HashMap<String, Integer> visitDetail = (HashMap<String, Integer>) se.getSession().getAttribute("visitDetail"); HashMap<String, Integer> visitDetail = (HashMap<String, Integer>) se.getSession().getAttribute("visitDetail");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("ip => ").append(se.getSession().getAttribute("ip")); sb.append("ip => ").append(se.getSession().getAttribute("ip"));
User user = redisUserUtil.get(); if (visitDetail.size() == 0) {
return;
}
sb.append("\t登录情况 => "); 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) -> { visitDetail.forEach((s, integer) -> {
sb.append("\n").append("Method:[").append(s.split(":")[1]).append("]\tTimes:[").append(integer).append("]\tPath:[").append(s.split(":")[0]).append("]"); 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());
} }
} }