springboot簡單專案(4) 登入攔截器
阿新 • • 發佈:2021-06-19
在登入控制類實現變成session
package com.jie.controller; 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.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; @Controller public class LoginController { @RequestMapping("/usr/login") public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model, HttpSession session){ //具體的業務: if("123456".equals(password)){ session.setAttribute("loginUser",username); return "redirect:/main.html"; } else { model.addAttribute("msg","使用者名稱密碼錯誤!"); return "index"; } } }
編寫一個攔截器類
package com.jie.config; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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(null==loginUser) { request.setAttribute("msg", "你未登入,請先登入!"); request.getRequestDispatcher("/index.html").forward(request, response); return false; } else { return true; } } }
在配置類加入自定義的攔截器類
同時設定靜態資源,登入頁面不被攔截
package com.jie.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; 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) { registry.addViewController("/").setViewName("index"); registry.addViewController("/index.html").setViewName("index"); registry.addViewController("/main.html").setViewName("dashboard"); } @Bean public LocaleResolver localeResolver(){ return new MyLocaleResolver(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginHandlerInterceptor()) .addPathPatterns("/**").excludePathPatterns("/index.html","/","/usr/login","/static/*"); } }