刚做Java不久,写个拦截器,以及现在用到的。
需求:登录拦截
原本是想用过滤器实现的,可是发现过滤器会把静态资源文件也过滤【因为我写的是过滤所有请求,会把登录的静态文件给过滤了,可能也能实现,但是没找到,又有点急】,因此用了拦截器实现,因为它可以排除资源请求的拦截
代码:
1:先写一个拦截器类 ,并实现接口 HandlerInterceptor
代码:
package com.jesse.config.interceptor; import com.jesse.util.SessionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 登陆拦截器 */ @Slf4j public class LoginInterceptor implements HandlerInterceptor { /** * 在请求被处理之前调用 * * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 检查每个到来的请求对应的session域中是否有登录标识 if (SessionUtil.getUserId(request) == null) { // 未登录,重定向到登录页 response.sendRedirect("/login.page"); return false; } String userName = SessionUtil.getUserId(request); log.info("当前用户已登录,登录的用户名为:{}", userName); return true; } /** * 在请求被处理后,视图渲染之前调用 * * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 在整个请求结束后调用 * * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
2:把写好的拦截器注入
代码:
package com.jesse.config.interceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfiguration implements WebMvcConfigurer{ @Bean public LoginInterceptor loginInterceptor(){ return new LoginInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { // 注册拦截器 //LoginInterceptor loginInterceptor = new LoginInterceptor(); InterceptorRegistration loginRegistry = registry.addInterceptor(loginInterceptor()); // 拦截路径 loginRegistry.addPathPatterns("/**"); // 排除路径 loginRegistry.excludePathPatterns("/"); loginRegistry.excludePathPatterns("/login.page"); loginRegistry.excludePathPatterns("/checklogin.page"); // 排除资源请求 loginRegistry.excludePathPatterns("/assets/**"); loginRegistry.excludePathPatterns("/css/**"); loginRegistry.excludePathPatterns("/fonts/**"); loginRegistry.excludePathPatterns("/image/**"); loginRegistry.excludePathPatterns("/js/**"); loginRegistry.excludePathPatterns("/qrcode/**"); } }
写的不好勿怪,纯属新手!