文档上传网站,增城做网站,网站的推广方法有哪些,公司网站管理图片一般情况下#xff0c;对来自浏览器的请求的拦截#xff0c;是利用Filter实现的#xff0c;这种方式可以实现Bean预处理、后处理。 Spring MVC的拦截器不仅可实现Filter的所有功能#xff0c;还可以更精确的控制拦截精度。
spring为我们提供了org.springframework.web.ser…一般情况下对来自浏览器的请求的拦截是利用Filter实现的这种方式可以实现Bean预处理、后处理。 Spring MVC的拦截器不仅可实现Filter的所有功能还可以更精确的控制拦截精度。
spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器继承此类可以非常方便的实现自己的拦截器。他有三个方法
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } public void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } public void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } 分别实现预处理、后处理调用了Service并返回ModelAndView但未进行页面渲染、返回处理已经渲染了页面 在preHandle中可以进行编码、安全控制等处理 在postHandle中有机会修改ModelAndView 在afterCompletion中可以根据ex是否为null判断是否发生了异常进行日志记录。 如果基于xml配置使用Spring MVC 可以利用SimpleUrlHandlerMapping、BeanNameUrlHandlerMapping进行Url映射相当于struts的path映射和拦截请求注入interceptors 如果基于注解使用Spring MVC可以使用DefaultAnnotationHandlerMapping注入interceptors。 注意无论基于xml还是基于注解HandlerMapping bean都是需要在xml中配置的。 一个demo 在这个例子中我们假设UserController中的注册操作只在900-1200开放那么就可以使用拦截器实现这个功能。
public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter { private int openingTime; private int closingTime; private String mappingURL;//利用正则映射到需要拦截的路径 public void setOpeningTime(int openingTime) { this.openingTime openingTime; } public void setClosingTime(int closingTime) { this.closingTime closingTime; } public void setMappingURL(String mappingURL) { this.mappingURL mappingURL; } Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String urlrequest.getRequestURL().toString(); if(mappingURLnull || url.matches(mappingURL)){ Calendar cCalendar.getInstance(); c.setTime(new Date()); int nowc.get(Calendar.HOUR_OF_DAY); if(nowopeningTime || nowclosingTime){ request.setAttribute(msg, 注册开放时间900-1200); request.getRequestDispatcher(/msg.jsp).forward(request, response); return false; } return true; } return true; }
} xml配置
bean idtimeBasedAccessInterceptor classcom.spring.handler.TimeBasedAccessInterceptor property nameopeningTime value9 / property nameclosingTime value12 / property namemappingURL value.*/user\.do\?actionreg.* /
/bean
bean classorg.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping property nameinterceptors list ref beantimeBasedAccessInterceptor/ /list /property
/bean 这里我们定义了一个mappingURL属性实现利用正则表达式对url进行匹配从而更细粒度的进行拦截。当然如果不定义mappingURL则默认拦截所有对Controller的请求。 UserController
Controller
RequestMapping(/user.do)
public class UserController{ Autowired private UserService userService; RequestMapping(paramsactionreg) public ModelAndView reg(Users user) throws Exception { userService.addUser(user); return new ModelAndView(profile,user,user); } // other option ...
} 这个Controller相当于Struts的DispatchAction 你也可以配置多个拦截器每个拦截器进行不同的分工.