springmvc+mybatis登入驗證2.0(更新了使用session來進行儲存使用者值,登出後清除session),並進行了攔截器的設定
阿新 • • 發佈:2019-02-13
本次在之前的文章實現登入註冊的基礎上又進行了新的升級,主要是採用了session和攔截器來對功能進行完善
新的Controller層
package lyb.com.controller; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import lyb.com.dao.UserMapper; import lyb.com.model.User; @Controller public class UserController { @Autowired private UserMapper mapper; @RequestMapping("index") public String index(){ return "login"; } @RequestMapping("login") public String login(User u,HttpSession session){ String username = u.getUsername(); String password = u.getPassword(); User user = mapper.selectUser(username); session.setAttribute("users", user); if(user!=null){ if(password.equals(user.getPassword())){ return "redirect:list"; }else{ return "error"; } }else{ return "error"; } } @RequestMapping("list") public ModelAndView userList(ModelAndView m){ List list = new ArrayList(); list = mapper.selectList(); m.addObject("list",list); m.setViewName("list"); return m; } @RequestMapping("edit") public ModelAndView edit(ModelAndView m,Integer id){ User user = mapper.selectByPrimaryKey(id); //編輯方法 m.setViewName("edit"); m.addObject("user",user); return m; } @RequestMapping("save") public String save(ModelAndView m,User user){ mapper.updateByPrimaryKeySelective(user); return "redirect:list"; } @RequestMapping("add1") public ModelAndView add1(ModelAndView m){ m.setViewName("add"); return m; } @RequestMapping("add") public String add(User user){ mapper.insert(user); return "redirect:list"; } @RequestMapping("delete") public String delete(Integer id){ mapper.deleteByPrimaryKey(id); return "redirect:list"; } @RequestMapping("exit") public ModelAndView exit(HttpSession session,ModelAndView m){ session.invalidate(); m.setViewName("redirect:index"); return m; } }
在controller層的login方法中設定了一個session來儲存使用者實體
在exit方法中設定了一個invalidate來銷燬session
使用攔截器需要進行兩個地方的配置1.建立一個UserInterceptor的攔截器類
2.在springmvc的配置檔案中增加攔截器的屬性package lyb.com.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class UserInterceptor implements HandlerInterceptor { private final String users = "users"; //private Test t; //攔截前處理 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception { Object sessionObj = request.getSession().getAttribute(users); if(sessionObj!=null) { return true; } response.sendRedirect("index"); return false; } //攔截後處理 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { } //全部完成後處理 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception { } }
這裡除了index和login外其他的請求在沒有session的情況下都被攔截<mvc:interceptors> <!-- 多個攔截器,順序執行 --> <mvc:interceptor> <mvc:mapping path="/*"/> <mvc:exclude-mapping path="/index"/> <mvc:exclude-mapping path="/login"/> <bean class="lyb.com.interceptor.UserInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
下一步實現首頁的預設訪問頁面