springboot 實現攔截器
阿新 • • 發佈:2022-05-19
建立一個攔截器
import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * hander攔截器 * * @author liu */ public class LoginHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //return true就放行 false就是攔截 //登入之後,應該有使用者的Session Object loginUser = request.getSession().getAttribute("loginUser"); //沒有登入` if (loginUser == null) { request.setAttribute("msg", "沒有許可權,請先登入"); request.getRequestDispatcher("/index.html").forward(request, response); return false; } else { return true; } } }
登入時傳送一個session,可用於攔截器判斷是否登入
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.thymeleaf.util.StringUtils; import javax.servlet.http.HttpSession; @Controller public class loginController { @RequestMapping("/user/login") public String login(@RequestParam("UserName") String userName, @RequestParam("PassWord") String pwd, Model model, HttpSession session) { if (!StringUtils.isEmpty(userName) && "123456".equals(pwd)) { //登入後傳送一個session,可用於攔截器判斷是否登入 session.setAttribute("loginUser",userName); return "redirect:/dashboard"; } else { model.addAttribute("msg", "使用者名稱或密碼錯誤"); return "index"; } } }
config檔案配置,新增攔截器
import org.springframework.context.annotation.Bean; 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 MyMvcConfig implements WebMvcConfigurer { //拓展引用,重寫檢視控制器方法 @Override public void addViewControllers(ViewControllerRegistry registry) { WebMvcConfigurer.super.addViewControllers(registry); registry.addViewController("/").setViewName("index"); registry.addViewController("/index.html").setViewName("index"); registry.addViewController("/list").setViewName("list"); registry.addViewController("/list.html").setViewName("list"); registry.addViewController("/dashboard").setViewName("dashboard"); registry.addViewController("/dashboard.html").setViewName("dashboard"); } //自定義的國際化元件就生效了 @Bean public MyLocaleResolver localeResolver(){ return new MyLocaleResolver(); } //攔截器,攔截什麼,放行什麼 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginHandlerInterceptor()) .addPathPatterns("/**") //注意:不要攔截登入請求"/user/login" .excludePathPatterns("/index.html", "/","/user/login","/index", "/css/*", "/img/**", "/js/**"); } }