接下來介紹一下springboot如何配置攔截器,很簡單,只需要兩個配置文件就可以了
首先配置登陸攔截器
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
HttpSession session = arg0.getSession();
//String uri = request.getRequestURI(); // 獲取登錄的uri,這個是不進行攔截的
//if(session.getAttribute("LOGIN_USER")!=null || uri.indexOf("system/login")!=-1) {// 說明登錄成功 或者 執行登錄功能
// 下邊的currentuser是我登陸后加在session中的數據,如果沒有就未登錄跳轉到登陸頁面
if(session.getAttribute("currentUser")!=null) {
// 登錄成功不攔截
return true;
}else {
// 攔截后進入登錄頁面,getContextPath()是獲取項目的根路徑,
// 根路徑+/就是我的登陸頁面,這個根據自己的登陸頁面自己來決定后邊加什么
arg1.sendRedirect(arg0.getContextPath()+"/");
return false;
}
}
}
然后配置webconfigure(具體都在注釋中)
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
// 這個方法是用來配置靜態資源的,比如html,js,css等等
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//文件磁盤圖片url 映射
//配置server虛擬路徑,handler為前台訪問的目錄,locations為files相對應的本地路徑
registry.addResourceHandler("/articlepicture/**").addResourceLocations("file:/D:/WProjects/images/collegeservice/articlepicture/");
registry.addResourceHandler("/headpicture/**").addResourceLocations("file:/D:/WProjects/images/collegeservice/headpicture/");
registry.addResourceHandler("/institution/**").addResourceLocations("file:/D:/WProjects/images/collegeservice/institution/");
registry.addResourceHandler("/photo/**").addResourceLocations("file:/D:/WProjects/images/collegeservice/photo/");
}
// 這個方法用來注冊攔截器,我們自己寫好的攔截器需要通過這里添加注冊才能生效
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns("/**") 表示攔截所有的請求,
// excludePathPatterns("/login", "/register") 表示除了登陸與注冊之外,因為登陸注冊不需要登陸也可以訪問
String[] excludes = new String[]{"/","/static/**","/service/**","/articlepicture/**","/headpicture/**","/institution/**","/photo/**"};
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(excludes);
// super.addInterceptors(registry);
}
}
