springmvc 中自定义拦截器

1、自定义拦截器,实现HandlerIterceptor接口

package cn.zzsxt.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import cn.zzsxt.entity.Userinfo;
/**
 * 用户登陆的访问权限控制
 * @author Think
 *
 */
public class LoginIntercetor implements HandlerInterceptor {

/**
     * 在控制器方法调用前执行
     * 返回值为是否中断
     * true,表示继续执行(下一个拦截器或处理器)
     * false则会中断后续的所有操作,所以我们需要使用response来继续响应后续请求
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
System.out.println("LoginInterceptor...preHandle");
//获取session
HttpSession session = request.getSession();
Userinfo user = (Userinfo)session.getAttribute("loginUser");
if(user!=null){
//登陆用户
return true;
}else{
String path=request.getServletContext().getContextPath();
System.out.println("path="+path);
response.sendRedirect(path+"/login.jsp");
return false;
}
}

/**
* 在控制器方法调用后,解析视图前调用,我们可以对视图和模型做进一步渲染或修改
     * 可在modelAndView中加入数据,比如当前时间
*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
}

/**
* 整个请求完成,即视图渲染结束后调用,这个时候可以做些资源清理工作,或日志记录
*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
}
}

2、配置springmvc.xml

<!--配置拦截器, 多个拦截器,顺序执行 -->
<mvc:interceptors>
    <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
       <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/user/login"/>
            <bean class="cn.zzsxt.interceptor.LoginIntercetor"></bean>
        </mvc:interceptor>
    <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
</mvc:interceptors>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC自定义拦截器以下步骤: 1. 创建一个实现HandlerInterceptor接口的拦截器类。在该类实现preHandle、postHandle、afterCompletion三个方法。 2. 在Spring配置文件配置该拦截器。可以使用<mvc:interceptors>标签配置,也可以使用注解@Configuration和@EnableWebMvc配置。 3. 配置拦截器的拦截规则。可以使用<mvc:interceptor>标签配置,也可以使用注解@Interceptor和@Order配置。 4. 使用拦截器。在Controller类或方法上使用注解@Interceptor或@WebMvcConfigurerAdapter.addInterceptors()方法添加拦截器以下是一个简单的示例: 1. 创建拦截器类 public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("MyInterceptor preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("MyInterceptor postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("MyInterceptor afterCompletion"); } } 2. 配置拦截器 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.example.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors> 3. 配置拦截规则 @Interceptor @Order(1) public class MyInterceptor implements HandlerInterceptor { ... } 4. 使用拦截器 @Controller public class MyController { @Interceptor(MyInterceptor.class) @RequestMapping("/hello") public String hello() { return "hello"; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值