springmvc拦截器用作验证登陆
一、写一个实现了HandlerInterception的类
实现接口中的3个方法,对于这三个方法,简单介绍一下
- preHandle方法:进入Handler方法之前执行。可以用于身份认证、身份授权。比如如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行(return false),否则就放行(return true)。
- postHandle方法:进入Handler方法之后,返回ModelAndView之前执行。可以看到该方法中有个modelAndView的形参。应用场景:从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图。
- afterCompletion方法:执行Handler完成之后执行。应用场景:统一异常处理,统一日志处理等。
那么实现登陆验证我们则需要在preHandle中进行操作,如下
public class Interceptor1 implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
// TODO Auto-generated method stub
//当请求去的是登陆页面就直接放行
if(arg0.getRequestURI().contains("login")){
return true;
}
HttpSession session= arg0.getSession();
String username=(String) session.getAttribute("username");
if(username!=null){
return true;
}
//跳转到登陆界面进行登陆
arg0.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(arg0, arg1);
return false;
}
}
那么这个session中的username什么时候放入喃
二、负责登陆的controller
@Controller
public class LoginController {
@Autowired
private StudentsinfoService studentsinfoService;
@RequestMapping(value="/login")
public String login(HttpServletRequest request,String username,String password){
HttpSession session=request.getSession();
//这里为验证此用户名和密码是否正确,不一定按照这个地方的来写
if(username!=null){
if(studentsinfoService.isStudent(username,password)){
session.setAttribute("username", username);
return "user";
}
String massage="账号或密码错误";
session.setAttribute("massage", massage);
//否则 登录失败 返回登陆页面
return "login";
}
}
三、相应的配置
在springmvc(dispatcherServlet-servlet.xml)中配置
<mvc:interceptor >
<mvc:mapping path="/**"/> //代表全部路径
<bean class="com.students.controller.Interceptor1"/> //拦截器的类名
</mvc:interceptor>
</mvc:interceptors>
<mvc:resources mapping="/resources/**" location="/static/resources" />
<mvc:resources mapping="/static/css/**" location="/static/bootstrap-3.3.7-dist/css/" />
<mvc:resources mapping="/static/images/**" location="/static/images/" />
<mvc:resources mapping="/static/js/**" location="/static/bootstrap-3.3.7-dist/js/" />