SpringMVC 拦截器的设置
温故而知新
好久没有看SSM项目了,最近重温一个demo,记录一下,免得以后麻烦。
功能是登陆
假设你在逛淘宝,看中了一件物品,当你在没有登陆的时候,点击商品的购买,会被立即打回登陆界面。
在进行一些需要权限的操作时,如果想进行一些操作,用户没有权限执行的时候,我们要进行对应的控制。
当然功能不止这一些。
第一步: 实现 HandlerInterceptor 接口。
代码如下:
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
// 1、获取session
Users users = (Users) httpServletRequest.getSession().getAttribute("users");
ModelAndView modelAndView = new ModelAndView();
System.out.println("===========================》进入拦截器");
System.out.println("用户信息为:" + users.toString());
// 2、如果为空,跳转到登陆页面
if (users == null) {
modelAndView.addObject("msg", "请您先进行登陆");
httpServletRequest.getRequestDispatcher(" /pages/login.jsp").forward(httpServletRequest, httpServletResponse);
System.out.println("===========执行方法后================》");
// 不允许Controller 的方法进行执行
return false;
} else {
//3、否则放行
return true;
}
}
// 主要在执行之前调用
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
// 结束后调用,一般用于资源的释放等
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
第二步: 在MVC的xml 文件中配置要拦截的请求。
<mvc:mapping path="">:表示你要拦截的路径
<mvc:exclude-mapping path=""/>表示你要== 不要 ==拦截的路径
代码如下:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!-- 放行登陆页面和 登陆的Controller路径 用于登陆 -->
<mvc:exclude-mapping path="/pages/login.jsp"/>
<mvc:exclude-mapping path="/login"/>
<mvc:exclude-mapping path="/"/>
<bean class="com.mxy.admin.common.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
path="/** “: 拦截所有的请求。
path=”/users/** “: 拦截 users下面的所有 路径。
path=”/" :拦截 项目根路径。
==有个问题没有解决 ==
当我在浏览器的地址栏直接输入 http://localhost:8080/projecName/pages/index.jsp的时候,也可以直接访问。不知到原因。还请看到的大神指导指导。