处理流程
-
有一个登录页面,需要写一个Controller访问登录页面
-
登录页面有一提交表单的动作。需要在Controller中处理。
a)判断用户名密码是否正确(在控制台打印)
b)如果正确,向session中写入用户信息(写入用户名username)
c)跳转到商品列表 -
拦截器。
a)拦截用户请求,判断用户是否登录(登录请求不能拦截)
b)如果用户已经登录。放行
c)如果用户未登录,跳转到登录页面。
编写登录jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath }/user/login.action"> <label>用户名:</label> <br> <input type="text" name="username"> <br> <label>密码:</label> <br> <input type="password" name="password"> <br> <input type="submit"> </form> </body> </html>
用户登陆Controller
@Controller @RequestMapping("user") public class UserController { /** * 跳转到登录页面 * * @return */ @RequestMapping("toLogin") public String toLogin() { return "login"; } /** * 用户登录 * * @param username * @param password * @param session * @return */ @RequestMapping("login") public String login(String username, String password, HttpSession session) { // 校验用户登录 System.out.println(username); System.out.println(password); // 把用户名放到session中 session.setAttribute("username", username); return "redirect:/item/itemList.action"; } }
编写拦截器
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { // 从request中获取session HttpSession session = request.getSession(); // 从session中获取username Object username = session.getAttribute("username"); // 判断username是否为null if (username != null) { // 如果不为空则放行 return true; } else { // 如果为空则跳转到登录页面 response.sendRedirect(request.getContextPath() + "/user/toLogin.action"); } return false; }
配置拦截器
只拦截商品的url,所以需要修改ItemController,让所有的请求都必须以item开头,如下图:
在springmvc.xml配置拦截器
<mvc:interceptor> <!-- 配置商品被拦截器拦截 --> <mvc:mapping path="/item/**" /> <!-- 配置具体的拦截器 --> <bean class="cn.itcast.ssm.interceptor.LoginHandlerInterceptor" /> </mvc:interceptor>