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/");
}