前言
在springMvc中使用拦截器,实现登录过滤。 页面存在差异,不进行页面展示。
login.jsp:登录界面 login:controller层的登录方法(验证方法) 注:在login.jsp中,表单的提交地址为controller层的 login方法。
<form action="${pageContext.request.contextPath}/user/login" method="post">
一、创建拦截器类
- 继承HandlerInterceptor接口,主要重写preHandle方法。
- preHandle 验证逻辑:
(1)第三部分的controller验证成功,user会被存入session中,user不为null,返回true。 (2)controller验证未成功时,任何访问都会再进入到login.jsp登录界面中,返回flase。
public class PrivilageInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if(user==null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
return true;
}
}
二、spring-mvc.xml中配置
exclude-mapping 放行执行登录的login 否则无法进行验证。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/login"/>
<bean class="com.mytest.interceptor.PrivilageInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
三、controller逻辑
在controller层的验证逻辑中,向底层传入username,和password参数。 (1)验证成功,user对象不为null,则在session域中存入user,并进入到 index.jsp 登录成功界面。 (2)验证失败,user对象为null,再重定向到登录界面继续验证。
@RequestMapping("/login")
public String login(String username, String password, HttpSession session){
User user = userService.login(username,password);
if(user!=null){
session.setAttribute("user",user);
return "redirect:/index.jsp";
}
return "redirect:/login.jsp";
}
|