1.定义拦截器类(LoginHandlerInterceptor.java):
注意,要实现HandlerInterceptor接口.本例为验证其它除了登陆页面相关路径外的其它页面,首次登录session会存进一个值username,若session对应的username为null,则不放行返回登陆页并且带去信息.若session里的username不为null,则放行
package com.id0304.springboot.component;
import org.springframework.lang.Nullable;
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;
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override//请求前
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String username = (String) request.getSession().getAttribute("username");
if (null == username) {
request.setAttribute("msg","没有权限请登录!");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}
else
return true;
}
@Override//请求中
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
@Override//请求后
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
2.在springmvc的配置类(MyMvcConfig.java)中配置拦截器:
图为拦截了/**下除了/和/index.html和/user/login这三个路径的请求进如上面定义的LoginHandlerInterceptor类中
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/", "/index.html", "/user/login");
}