SpingMVC:如何设置一个拦截器?
(interceptors) 拦截器类似于spring aop和tomcat中过滤器,但是作用域不同。
AOP:针对特点方法前后进行扩充,一般对serviceimpl进行
拦截器:针对控制器方法进行控制。
一、步骤
1、在springmvc配置中声明一个拦截器。
<!--拦截器:拦截对于控制器的访问--> <mvc:interceptors> <!--拦截所有的控制器--> <bean class="com.lurenjia.interceptor.DemoInterceptor"></bean> <!--指定拦截的控制器--> <mvc:interceptor> <mvc:mapping path="/login"/> <mvc:mapping path="/main"/> <bean class="com.lurenjia.interceptor.DemoInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
2、编写拦截器实现类
实现HandlerInterceptor接口,重写方法。
public class DemoInterceptor implements HandlerInterceptor { @Override public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception { //进入控制器之前执行 Object user = request.getSession().getAttribute("user"); if(user!=null){ //如果用户登录了,可以访问其它控制器 return true; }else { //如果用户没登录,则不允许访问其它控制器 response.sendRedirect("login.jsp"); return false; } } @Override public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //控制器执行完成,跳转之前 //数据流转 modelAndView.addObject("data","guaguagau"); //过滤敏感词 String word = modelAndView.getModel().get("data").toString(); String newWord = word.replace("敏感词","***"); modelAndView.getModel().put("data",newWord); //改变跳转路径 modelAndView.setViewName("error.jsp"); } @Override public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception { //跳转之后执行:用于记录执行过程中的异常 if(ex!=null){ System.out.println("存在异常"); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步