springmvc拦截器实现登录功能

比较拦截器和过滤器的区别。 拦截器可配置多个,可定义拦截前中后执行的方法,可以调用业务组件代码。

拦截器使用更加灵活,推荐使用拦截器。

第一步,新建一个拦截器类

public class LoginInterceptor implements HandlerInterceptor{
	/**
	 * 调用前执行此方法。
	 */
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		//获取请求URL
		String uri = request.getRequestURI();
		//URL:login.jsp是公开的;这个demo是除了login.jsp是可以公开访问的,其它的URL都进行拦截控制  
		if(uri.indexOf("login")>=0){
			return true;
		}
		//获取session
		HttpSession session = request.getSession();
		String username = (String)session.getAttribute("username");
		if(username != null){
			return true;
		}
		//不符合条件的,跳转到登录界面  
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); 
		return false;
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("==================>>执行postHandle");
	}
	/**
	 * handler 执行完成后调用此方法。
	 */
	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("==================>>执行afterCompletion");
	}

}

 配置拦截器

<!-- 5拦截器配置 -->
	 <mvc:interceptors>
	 	<mvc:interceptor>
	 		<mvc:mapping path="/**"/>
	 		<bean class="com.soecode.lyf.interceptor.LoginInterceptor"></bean>
	 	</mvc:interceptor>
	 </mvc:interceptors>

第二步 编写登录控制器

@Controller
public class LoginController {
	@RequestMapping(value="/login",method = RequestMethod.POST)
	public String login(HttpSession session,String username,String password,Model model){
		session.setAttribute("username", username);
		model.addAttribute("username", username);
		return "redirect:book/list";
	}
	
	@RequestMapping(value="/logout",method = RequestMethod.POST)
	public String logout(HttpSession session){
		session.invalidate();
		return "redirect:/WEB-INF/jsp/login.jsp";
	}
}

第三步  测试。

请求书籍预定页面,跳转到登录界面。



 输入账号后,提交登录,成功进入页面



 

猜你喜欢

转载自yhzhangdota.iteye.com/blog/2386787