拦截器-登录验证和静态资源白名单
HandlerInterceptor:
此类中有三个方法 1.preHandle() -- 处理程序执行之前的拦截点。 2.postHandle() -- 成功执行处理程序后的拦截点。 3.afterCompletion() -- 请求处理完成后的回调,即渲染视图后。
如下简单写法
配置类
/** * title 登录验证 */ public class LoginInterceptor implements HandlerInterceptor { /** * title 处理程序执行之前的拦截点 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 登录验证处 HttpSession session = request.getSession(); Object userInfo = session.getAttribute("userInfo"); if(userInfo != null){ // 放行 return true; } // 不放行 说明没有登录 跳转到登录页面 response.sendRedirect("/"); return false; } /** * title 成功执行处理程序后的拦截点 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } /** * title 请求处理完成后的回调,即渲染视图后 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 可以处理一些preHandle用到的一些工具,clear、remove 关闭一些io、删除一些缓存或者删除线程池中的内容 HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
@Component public class MyConfig implements WebMvcConfigurer{ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) // 默认拦截所有请求 .addPathPatterns("/**") // excludePathPatterns 放行哪些 .excludePathPatterns("/login","/","/loginSystem") // 可以分开写 下面是静态资源放行 .excludePathPatterns("/css/**","/js/**"); } }
@Controller public class MyController { @ResponseBody @GetMapping("/getUser") public User getUser(){ User user = new User(); user.setAge(20); user.setName("张三"); return user; } /** * title 去登录页面 * * @param request * @return */ @GetMapping(value = {"/","/login"}) public String login(HttpServletRequest request){ // 获取session HttpSession session = request.getSession(); // 获取session中登录信息 Object userInfo = session.getAttribute("userInfo"); if(userInfo!=null){ // 登陆过去首页 return "index"; }else{ // 没有登录去登录页面 return "login"; } } /** * title 登录操作 * * @param request * @return */ @GetMapping("/loginSystem") public String system(HttpServletRequest request){ // 登录操作 HttpSession session = request.getSession(); session.setAttribute("userInfo","登录信息"); return "index"; } }
@Data @ToString public class User { private String name; private int age; }
前台页面
login页面
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 登录页面 <a th:href="@{/loginSystem}">登录</a> </body> </html>
index页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>欢迎</title> </head> <body> <h1>欢迎光临(Controller)</h1> </body> </html>
pom文件添加thymeleaf包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>