1.編寫登錄攔截器
package com.xxx.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;
import javax.servlet.http.HttpSession;
import java.io.PrintWriter;
/**
* 登錄攔截器
*/
@Component
public class SessionInterceptor implements HandlerInterceptor {
/**
* 該方法將在請求處理之前進行調用,返回true會執行下一個Interceptor,
* 返回false則不會執行下一個Interceptor也不會執行Controller裏的方法,
* 先聲明的Interceptor的preHandle方法會先執行。
*
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("SessionInterceptor preHandle");
HttpSession session = request.getSession(false);
if (session != null && session.getAttribute("user") != null) {
return true;
} else {
PrintWriter printWriter = response.getWriter();
printWriter.write("{code: 501, message:'not login!'}");
return false;
}
}
/**
* 該方法將在preHandle方法返回爲true,
* 並且當前請求進行處理之後調用,
* 先聲明的Interceptor的postHandle方法會後執行
*
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("SessionInterceptor postHandle");
}
/**
* 該方法將在preHandle方法返回爲true,
* 並且當前請求進行處理之後調用,
* 一般用於進行資源清理
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("SessionInterceptor afterCompletion");
}
}
2.將其添加到攔截配置類中
package com.xxx.config;
import com.xxx.interceptor.SessionInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private SessionInterceptor sessionInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(sessionInterceptor)
// 設置攔截所有路徑地址
.addPathPatterns("/**")
// 設置過濾不需要攔截的路徑地址,尤其是登錄地址一定要加上
.excludePathPatterns("/user/login", "/error");
}
}
此時登錄攔截器就配置好了,除了請求 /user/login 和/error 的請求都會被攔截器攔截
3.添加請求映射方法
在上面的WebMvcConfig類中添加
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// 配置請求映射跳轉路徑
registry.addViewController("/hi").setViewName("hi.html");
}
所有請求對應的地址就可以直接跳轉到指定頁面中,減少冗餘頁面跳轉代碼。
4.添加靜態文件訪問路徑
在上面的WebMvcConfig類中添加
/**
* 添加靜態文件訪問路徑
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/");
}