使用SpringMVC攔截器實現簡單的登陸驗證功能(面向小白)
阿新 • • 發佈:2018-11-14
接著上一篇文章《使用Idea建立一個JavaWeb的SSM(maven)專案實現登陸功能》
在上一篇文章裡已經實現了頁面登陸的功能,但是不夠完善,在沒有攔截器的情況下我可以不登陸一樣可以訪問index.jsp頁面
如圖
在這種情況下專案是有風險的,別人可以在不登陸的情況下隨意訪問你的專案路徑
這時候就可以使用攔截器來避免這種情況(這裡只是最簡單的實現,別的可以自己琢磨琢磨~)
在你的springMVC.xml配置檔案種加上攔截器和過濾靜態資源
<!--攔截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/login/toLogin*" /><!--這是指明某些請求不需要經過攔截器--> <mvc:exclude-mapping path="/login/login*" /> <bean class="com.sixmai.interceptor.LoginInterceptor"></bean><!--這裡是你配置的攔截器的路徑--> </mvc:interceptor> </mvc:interceptors> <!-- 過濾靜態資源 --> <mvc:default-servlet-handler />
然後在你的原來登陸的controller裡新增一段程式碼,登陸成功就把你的登陸名存進session 如圖
(也許我們的方法不一樣,但是原理都一樣,我用的session你也可以用cookie或者是Redis)
package com.sixmai.controller; import com.sixmai.domain.User; import com.sixmai.service.LoginService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpSession; import java.util.Map; @Controller @RequestMapping("login") public class LoginController { @Autowired private LoginService loginService; @RequestMapping("toLogin") public String toLogin() { return "login.jsp"; } @RequestMapping("login") public String login(User user, Model model, HttpSession session) { String loginname = user.getLoginname(); String password = user.getPassword(); Map<String, Object> map = loginService.login(loginname, password); if (map.get("status").equals("200")) { //============================如果登陸成功就把使用者名稱存進session==================== session.setAttribute("loginname",loginname); //=============================================================================== return "system/index.jsp"; } else { model.addAttribute("error", map.get("msg")); return "login.jsp"; } } }
修改好了以後在專案種建立一個interceptor資料夾
接下來在interceptor資料夾種新增一個攔截器(LoginInterceptor)並且實現HandlerInterceptor 重寫它的方法
package com.sixmai.interceptor; 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 LoginInterceptor implements HandlerInterceptor { //之前執行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { HttpSession session = request.getSession(); String loginname = (String) session.getAttribute("loginname");//從session取出登陸名 if (loginname !=null&&!loginname.equals("")){//判斷是否存進去了登陸名,沒有存進去就是沒登陸 return true; } request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);//沒登陸就給你跳轉到登陸頁面 return false; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { } }
到這裡基本就配置完成了
當我再次想通過訪問/index/toIndex訪問index.jsp頁面的時候就給我自動跳轉到了login.jsp頁面
The end!!!