1.拦截器类
Spring MVC中的拦截器,通常两种方式来定义:
1.通过实现HandlerInterceptor接口,或继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义。
2.通过实现WebRequestInterceptor接口,或继承WebRequestInterceptor接口的实现类来定义。
public class LoginInterceptor implements HandlerInterceptor {
/**
* preHandle() 方法:该方法会在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行;
* 当其返回值为false时,会中断后续的所有操作(包括调用下一个拦截器和控制器类中的方法执行等)。
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//从Session中获取User对象
Object user = request.getSession().getAttribute("user");
//如果user没有数据,说明未登录,返回到登录页面
if(user==null){
response.sendRedirect("/jsp/login.jsp");
return false;
}
//否则,直接放行
return true;
}
/**
* postHandle()方法:该方法会在控制器方法调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
/**
* afterCompletion()方法:该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
2.SpringMvc.xml中配置我们定义的拦截器
<!-- 配置controller扫描 -->
<context:component-scan base-package="cn.jindou.crm.controller" />
<!-- 配置注解驱动 -->
<!-- <mvc:annotation-driven /> -->
<!-- 配置注解驱动可能导致拦截器不生效,改成下面的配置 -->
<!--注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!--配置拦截器的作用路径 -->
<mvc:mapping path="/**" />
<!-- 配置不受拦截器作用的路径 -->
<mvc:exclude-mapping path="/user/**" />
<!--定义在<mvc:interceptor>下面的表示匹配指定路径的请求才进行拦截 -->
<bean class="cn.jindou.Interceptors.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
3.Controller层代码
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "login",method = RequestMethod.POST)
public ModelAndView queryUser(User user,HttpSession session){
//User对象接收页面数据,并执行查询
User use = this.userService.queryUser(user);
//如果查询出来了,说明有数据,设置返回页面并将User对象存到Session中
if(use != null){
session.setAttribute("user", use);
//设置Session存活时间,方面查看SpringMvc登录拦截器的效果
session.setMaxInactiveInterval(10);
return new ModelAndView("index");
}else {
session.setAttribute("error", "密码或账户不存在");
return new ModelAndView("login");
}
}
}
SpringMvc拦截器就知道这些了,代码也不严谨,以后多多努力。