--------------------------------------------
登陸controller方法
@Controller public class LoginController { // 登陸 @RequestMapping("/login") public String login(HttpSession session, String username, String password) throws Exception { // 調用service進行用戶身份驗證 // ... // 在session中保存用戶身份信息 session.setAttribute("username", username); // 重定向到商品列表頁面 return "redirect:/items/queryItems.action"; } // 退出 @RequestMapping("/logout") public String logout(HttpSession session) throws Exception { // 清除session session.invalidate(); // 重定向到商品列表頁面 return "redirect:/items/queryItems.action"; } }
登陸認證攔截實現
public class LoginInterceptor implements HandlerInterceptor { //進入 Handler方法之前執行 //用於身份認證、身份授權 //比如身份認證,如果認證通過表示當前用戶沒有登陸,需要此方法攔截不再向下執行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //獲取請求的url String url = request.getRequestURI(); //判斷url是否是公開 地址(實際使用時將公開 地址配置配置文件中) //這里公開地址是登陸提交的地址 if(url.indexOf("login.action")>=0){ //如果進行登陸提交,放行 return true; } //判斷session HttpSession session = request.getSession(); //從session中取出用戶身份信息 String username = (String) session.getAttribute("username"); if(username != null){ //身份存在,放行 return true; } //執行這里表示用戶身份需要認證,跳轉登陸頁面 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); //return false表示攔截,不向下執行 //return true表示放行 return false; }
頁面請求效果:
請求商品列表頁面(沒有加入攔截器之前 是可以直接請求到的)
http://localhost:8888/FirstSSM/item/queryItems.action
請求被攔截 因為沒有登錄 所以跳轉到登錄頁面 讓用戶登錄