springMvc拦截器的使用---登录权限的控制

一、applicationContext.xml配置文件配置

	<!-- 拦截器的配置 -->
<mvc:interceptors>
<!--  使用bean定义一个Interceptor,直接定义在mvc:interceptors根
	 下面的Interceptor将拦截所有的请求   -->
	 <mvc:interceptor>
	 	<!-- 进行拦截:/**表示拦截所有controller -->
	 	<mvc:mapping path="/**" />
	 	 <!-- 
	 	 不进行拦截 ,填写不拦截的路径,该路径不进行拦截
	 	<mvc:mapping path=""/>
	 	-->
	 	<!-- 处理拦截器的具体实现类,写类的全路径 -->
	 	<bean class="com.intercepter.LoginIntercepter"></bean>
	 </mvc:interceptor>
</mvc:interceptors>

二、controller层代码编写
/**

  • 登录拦截器,只拦截controller,不拦截静态资源
  • @author Admin

*/
public class LoginIntercepter implements HandlerInterceptor{
// 进入控制器方法之前执行
// 用于生分验证、生分授权
// 比如身份认证,如果认证不通过表示当前用户没有登录,需要此方法在controller之前进行拦截
// 不再像下执行
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// 取得当前请求的url
String url = request.getRequestURI();
System.out.println(“url:”+url);
// 如果是登录请求,就不拦截
if(url.indexOf(“login”)>0){
return true;
}
// 取得session中的数据
HttpSession session=request.getSession();
String u=(String) session.getAttribute(“userName”);
// 如果用户已经登录,不拦截
if(u!=null){
return true;
}
// 执行到这里,表名身份需要进行验证,跳转到登录页面,利用请求转发进行页面的跳转
request.getRequestDispatcher(“login.jsp”).forward(request, response);
return false;
}

// 进入控制器方法之后,返回modelandView之前执行
// 应用场景从modelAndView出发,将公共模型的数据(比如菜单导航)在这里传到视图,
// 也可以在这里统一指定视图
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println(“进入控制器方法之后,返回modelandView之前执行”);
}

// 执行控制器完成此方法
// 应用场景:统一事务处理,统一日志处理
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println(“应用场景:统一事务处理,统一日志处理”);
}

}

猜你喜欢

转载自blog.csdn.net/weixin_41557853/article/details/86529394