Spring Boot拦截器
| 回值类型 | 方法声明 | 描述 |
|---|---|---|
| boolean | preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) | 该方法在控制器处理请求方法前执行,其返回值表示是否中断后续操作,返回 true 表示继续向下执行,返回 false 表示中断后续操作。 |
| void | postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) | 该方法在控制器处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的模型和视图做进一步修改。 |
| void | afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) | 该方法在视图渲染结束后执行,可以通过此方法实现资源清理、记录日志信息等工作。 |
LoginHandlerInterceptor
/**
* 拦截器
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取Session
Object loginUser = request.getSession().getAttribute("LoginUser");
if (loginUser == null) {
request.setAttribute("msg","未登录,请先登录");
//request.getRequestDispatcher("/login.html").forward(request, response);//如果报死循环就使用下面这句
response.sendRedirect("/login");
return false;
}else {
return true;
}
}
}
MyMvcConfig
/**
* 定制Spring Boot
*/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//设置在浏览器输入的url地址,addViewController("/") 浏览器输入的地址, setViewName:跳转的页面
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/login.html").setViewName("login");
registry.addViewController("/main.html").setViewName("index");
}
//拦截器配置
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")//拦截所有请求,包括静态资源文件
.excludePathPatterns("/login.html","/","/user/login","/assets/**","/Css/**","/front/**","/Images/**","/Js/**");//放行登录页,登陆操作,静态资源
}
}
或者
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
String[] pathPatterns = {"/**"}; //拦截路径规则
String[] excludePathPatterns = {"/login", "/regist", "/statics/**"}; //排除路径规则
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns(pathPatterns)
.excludePathPatterns(excludePathPatterns);
}
}
LoginController
@Controller
public class LoginController {
@RequestMapping("/user/login")
public String Login(@RequestParam("username") String username,
@RequestParam("password") String password,
Model model,
HttpSession session){
if(!"".equals(username)&&"123456".equals(password)){
session.setAttribute("LoginUser",username);
return "redirect:/main.html";
}else {
model.addAttribute("msg","用户名或密码错误");
return "login";
}
}
}