Springboot拦截器实现
下面展示一些 内联代码片
。
如写个登录类拦截器,继承HandlerInterceptorAdapter
若user=null即无用户,response.sendRedirect("/admin")重定向到登录页面
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
if(request.getSession().getAttribute("user") == null) {
response.sendRedirect("/admin");
}
return super.preHandle(request, response, handler);
}
}
添加配置类实现WebMvcConfigurer接口
重写addInterceptors(InterceptorRegistry)方法
addPathPatterns("/admin/**"):拦截所有 /admin/** 请求
excludePathPatterns("/admin"):排除 /admin 请求
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 WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin")
.excludePathPatterns("/admin/login");
}
}
值得一提的是WebMvcConfigurerAdapter类已经过时,在新版本2.x中被废弃,原因是springboot2.0以后,引用的是spring5.0,而spring5.0取消了WebMvcConfigurerAdapter,所以一开始用WebMvcConfigurerAdapter类的时候划横线不给使用才换成了WebMvcConfigurer接口