java中拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作,一般拦截器方法都是通过动态代理的方式实现,可以通过它来进行权限验证,或者判断用户是否登录,访问日志等功能
第一步:创建一个类实现HandlerInterceptor接口,重写接口的方法,只是多了一个@Component注解,这个注解是为后面的使用时进行注入,已登录为例,代码如下:
package main.blog.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import main.blog.entity.AdminBean; @Component public class LoginInterceptor implements HandlerInterceptor { //进入 Handler方法之前执行,比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //判断session HttpSession session = request.getSession(); //从session中取出用户身份信息 AdminBean admin = (AdminBean) session.getAttribute("admin"); if(admin!=null) { return true; } //执行这里表示用户身份需要认证,跳转登陆页面 response.sendRedirect(request.getContextPath()+"/admin/login"); //false表示拦截,不向下执行,true表示放行 return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } }
第二步:创建一个类继承WebMvcConfigurer类并重写addInterceptors方法,springboot2中的,代码如下:
package main.blog.interceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfiguration implements WebMvcConfigurer { /** * 登录权限拦截器 */ @Autowired private LoginInterceptor loginInter; @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration loginRegistry = registry.addInterceptor(loginInter); //拦截以/admin/为前缀的 url路径 loginRegistry.addPathPatterns("/admin/**"); //可以通过的白名单请求地址 loginRegistry.excludePathPatterns("/admin/login"); loginRegistry.excludePathPatterns("/admin/captcha"); loginRegistry.excludePathPatterns("/admin/dologin"); //可以通过的白名单静态资源 loginRegistry.excludePathPatterns("/admin/js/**"); loginRegistry.excludePathPatterns("/admin/css/**"); loginRegistry.excludePathPatterns("/admin/img/**"); loginRegistry.excludePathPatterns("/admin/layui/**"); } }
到此拦截器的功能就实现啦