From 9a4a93042624d4577c326c2beee81bd304de9ba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=B5=B7?= Date: Wed, 4 Dec 2019 15:28:01 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=AE=BF=E9=97=AE=E6=83=85?= =?UTF-8?q?=E5=86=B5=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blog/configuration/InterceptorConfig.java | 20 +++++++++---------- .../filter/AuthenticationFilter.java | 6 +++++- .../listener/SessionListener.java | 20 ++++++++++--------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/main/java/cn/celess/blog/configuration/InterceptorConfig.java b/src/main/java/cn/celess/blog/configuration/InterceptorConfig.java index 1e22834..85419c0 100644 --- a/src/main/java/cn/celess/blog/configuration/InterceptorConfig.java +++ b/src/main/java/cn/celess/blog/configuration/InterceptorConfig.java @@ -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 servletListenerRegistrationBean() { -// ServletListenerRegistrationBean slrBean = new ServletListenerRegistrationBean(); -// slrBean.setListener(new SessionListener()); -// return slrBean; -// } + @Bean + public ServletListenerRegistrationBean servletListenerRegistrationBean() { + // session listener register bean + ServletListenerRegistrationBean slrBean = new ServletListenerRegistrationBean(); + slrBean.setListener(new SessionListener()); + return slrBean; + } } diff --git a/src/main/java/cn/celess/blog/configuration/filter/AuthenticationFilter.java b/src/main/java/cn/celess/blog/configuration/filter/AuthenticationFilter.java index b80cf40..b72b38a 100644 --- a/src/main/java/cn/celess/blog/configuration/filter/AuthenticationFilter.java +++ b/src/main/java/cn/celess/blog/configuration/filter/AuthenticationFilter.java @@ -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); } diff --git a/src/main/java/cn/celess/blog/configuration/listener/SessionListener.java b/src/main/java/cn/celess/blog/configuration/listener/SessionListener.java index 7096bd4..6241c32 100644 --- a/src/main/java/cn/celess/blog/configuration/listener/SessionListener.java +++ b/src/main/java/cn/celess/blog/configuration/listener/SessionListener.java @@ -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()); - // 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 visitDetail = (HashMap) 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()); } }