SpringMvc实现简单登录拦截器

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拦截器就知道这些了,代码也不严谨,以后多多努力。

猜你喜欢

转载自blog.csdn.net/weixin_38943098/article/details/86591936