SpringBoot拦截器
2021-12-19 本文已影响0人
放羊娃华振
SpringBoot中拦截器是十分有用的,我们可以加拦截器中做用户登录态的校验,同时也可以加一个数据加解密的操作。实现拦截器的逻辑如下:
1、自定义一个拦截器
package com.stormdzh.study.springdemo.intercepter.user;
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;
import javax.servlet.http.HttpSession;
/**
* 登录拦截器
*/
@Slf4j
public class LoginIntercepter implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("preHandle拦截的请求路径是{}",requestURI);
System.out.println("preHandle拦截的请求路径是{}"+requestURI);
HttpSession session = request.getSession();
Object ssuser = session.getAttribute("ssuser");
if(ssuser != null){
//true是放行
return true;
}
//拦截住未登录,跳转到登录页
request.setAttribute("msg","请先登录!");
//重定向
//request.sendRedirect("/");
//转发请求
request.getRequestDispatcher("/comm/logout").forward(request,response);
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
String requestURI = request.getRequestURI();
log.info("postHandle拦截的请求路径是{}",requestURI);
System.out.println("postHandle拦截的请求路径是{}"+requestURI);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
String requestURI = request.getRequestURI();
log.info("afterCompletion拦截的请求路径是{}",requestURI);
System.out.println("afterCompletion拦截的请求路径是{}"+requestURI);
}
}
2、添加一个配置文件,在配置文件中注册拦截器
package com.stormdzh.study.springdemo.config.user;
import com.stormdzh.study.springdemo.intercepter.user.LoginIntercepter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 1、编写一个拦截器实现HandlerInterceptor接口
* 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)
* 3、指定拦截规则【如果是拦截所有,静态资源也会被拦截】
*/
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginIntercepter())
.addPathPatterns("/**")
.excludePathPatterns("/","/login","/register","/css/**","/js/**","/images/**","/fonts/**"
,"/comm/logout"
,"/user/login");
}
}