springMVC转springboot总结之拦截器
2018-07-14 本文已影响0人
伟BigBig
最近耐不住寂寞,又不想做新功能,所以闲来无事就把原本的springMVC框架换成了springboot,因为听说springboot能够提高开发效率,所以咳咳......
接下来我分别用springMVC和springboot两种方式分别实现拦截器,这也是我在本系统中的大体实现方式,首先是springMVC
1.先实现一个拦截器(本例用的是登录拦截器,是基于注解实现的,详情请往后看)
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
if (o instanceof HandlerMethod){
//检查是否有@LoginRequired登录注解
HandlerMethod handlerMethod = (HandlerMethod) o;
Method method = handlerMethod.getMethod();
LoginRequired annotation = method.getAnnotation(LoginRequired.class);
//没有直接放行,有的话进行相应的验证
if (annotation != null){
//具体验证逻辑略
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
2.登录注解
/**
* @author Javed javed.deng@gmail.com
* @description 是否需要登录注解
* @date 2018/1/21 18:04
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
}
3.在xml文件中注册拦截器,添加如下代码
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!-- 你自己的拦截器路径 -->
<bean class="com.javed.p4m.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
4.如何使用。由第3步可以看出我们拦截的是所有路径,但是如果没有@LoginRequired注解的话也是不会起真正的拦截作用的
@RequestMapping(value = "list", method = RequestMethod.GET)
//使用@LoginRequired注解,那么这个方法就会需要登录才能访问
@LoginRequired
public ModelAndView articleListPage() {
ModelAndView mv = new ModelAndView();
mv.setViewName(PageConstants.ADMIN_PAGE_ARTICLE_LIST);
return mv;
}
springMVC的使用方法到这里基本就完成了,接下来是springboot的拦截器使用方法
1.写一个拦截器,同springMVC的拦截器一样,不用赘述。
2.写一个注解,同上
3.注册拦截器
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor()).addPathPatterns("/**");
}
}
4.使用方法同上
总结一下:通过代码我们可以对比出来,springMVC和springboot在实现拦截器方式上差别就是一个在xml中完成注册,一个是在代码中完成注册,springboot看起来确实要清爽一些,而且在多个拦截器的时候springboot就更清爽了。
原本链接(我自己的小站):https://www.plaza4me.com/article/20180712220517202