SpringBoot拦截器的配置和使用
1.建立拦截器的类(Interceptor)需要实现接口 handlerInterceptot
项目结构:
package com.web.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
//拦截器拦截登录这一块 需要用下面的代码 prehandle
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取请求的url
String url = request.getRequestURI();
//判断用户是否已登录
if (request.getSession().getAttribute("empid") != null) {
return true;
}else{
//用户未登录,拦击其请求并将其转发到用户登录页面
System.out.println("未登录");
response.sendRedirect("back");
return false;
}
}
}
2.建立完Interceptor之后并不是完成了需要进行配置(config)即inerceptorconfig 需要实现 WebMvcConfigurer接口实现代码如下
package com.web.config;
import com.web.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//这个必须要加该注释 不然识别不了是配置类
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
//要拦截user下的所有访问请求,必须用户登录后才可访问,
// 但是这样拦截的路径中有一些是不需要用户登录也可访问的
String [] addPathPatterns = {
//拦截路径
"/**"
};
//要排除的路径,排除的路径说明不需要用户登录也可访问
String [] excludePathPatterns = {
//即你在controller @requestmapping("/地址")
"/com/out","/com/error/controller","/back"
};
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
}
}