另外一个博客站点

SpringBoot 拦截器

什么是拦截器?

java当中,客户端发起请求 被特定规则校验后是否存在于某个规则校验当中,存在即 被Interceptor 实现类拦截。

创建一个拦截器

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 实现 HandlerInterceptor 接口;

  2. 并且重写 preHandle, postHandle, afterCompletion 方法;

public class requestInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();//获取session 
        String URL = request.getRequestURL().toString();//获取请求URL
        System.out.println("请求地址:" + URL);
        Object obj = session.getAttribute(constants.USER_);//得到登录USER
        if (obj == null) {
        	//可以 在进行权限验证,登录校验等。
            System.out.println("未登录-需要登录");
            request.getRequestDispatcher("/login.html").forward(request, response);
            return false;
        } else {
            return true;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }
}
  • preHandle 在客户端发送处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
  • postHandle 在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView ;
  • afterCompletion 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);

配置 拦截器 (让拦截器生效)

  1. 实现 WebMvcConfigurer

还有其他实现(类) ,使用 起来类似,但是需要注意静态资源释放的小细节。

@Configuration
public class mvcConfig implements WebMvcConfigurer  {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    	//设置默认跳转试图
        //registry.addViewController("/").setViewName("index");
       //registry.addViewController("/index.html").setViewName("index");
       
    }



    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //需要配置2:----------- 告知拦截器:/login.html 与 /static/** 不需要拦截 (配置的是 路径)
        // ==/login.html  是controller对应的方法
       // ==/static/** 是静态资源路径
        registry.addInterceptor(new requestInterceptor()).addPathPatterns("/**").excludePathPatterns("/login.html")
       .excludePathPatterns("/static/**");

    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {}
}

使用WebMvcConfigurer配置拦截器,在释放静态资源的的时候需要在application.yml里面加入配置,才能生效
2. 配置application.yml配置

spring:
  mvc:
    static-path-pattern: /static/**

配置好后,在html(jsp)上面访问 静态资源文件写法

	  <link rel="stylesheet" href="/static/css/xadmin.css">

项目结构图:
在这里插入图片描述

posted @ 2020-11-17 10:44  z-7  阅读(117)  评论(0编辑  收藏  举报
另外一个博客站点