springboot项目中使用拦截器和profile中的include标签

在springboot中使用拦截器

编写controller

@Controller
@RequestMapping("hello")
public class HelloController {

    @RequestMapping(path = {"1"})
    @ResponseBody
    public String hello(){
        return "hello,intecepor111............";
    }

    @RequestMapping(path = {"2"})
    @ResponseBody
    public String hello2(){
        return "hello,intecepor222............";
    }
}

编写拦截器:

public class HelloInteceptor implements HandlerInterceptor {
    /**
     * 前置处理
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("没有放行的路径!欢迎来到拦截器的处理------------>>>>preHandle 拦截的路径是"+request.getRequestURI());
        return true;
    }
}

在配置类中进行配置:

@Configuration
public class SpringGlobalConfig implements WebMvcConfigurer {

    /**
     * 终于明白了!!!!!!一个是拦截!另外一个是放行的原因。
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        System.out.println("来了老弟...........");
        registry.addInterceptor(new HelloInteceptor()).
                // 放行  说明直接去了handler
                excludePathPatterns("/hello/1").
                // 不放行 需要经过interceptor来进行处理!
                addPathPatterns("/hello/2");
    }
}

还有另外一种配置方式,就是在自定义的拦截器上加上对应的注解,使其成为组件。然后在配置类中直接进行注入,不需要在配置类中进行new 自定义拦截器的这种方式使用。

需要注意的是:

只有被拦截的路径,才会走到拦截器中;没有被拦截的路径是不会走到拦截器中的,而是直接到了handler中来进行处理。

示例:

因为放行了/hello/1,所以当访问/hello/1的时候,会放行,不会打印拦截器中的内容;

访问/hello/2的之后,因为不放行,就会来到拦截器中来进行执行。

profile的指定

我们在springboot的配置环境中通常有多个配置文件,但是有时候我们需要在当前的环境中引入其他的配置文件,那么怎么做到?

示例:

@Component
@ConfigurationProperties(prefix = "person")
@Data
public class User implements Serializable {
    private String name;
    private String address;
    private Integer id;
}

对应的三个配置项:

写了四个配置文件,其中在application中,指定将common,redis和tmp这三个配置文件一起加载到当前配置文件中来。

那么打包后的application.yml文件就相当于是有了person的全部属性内容。

注意:如果application.yaml文件中存在值,而在其他配置文件中也存在对应的值,那么其他配置文件中的值会来进行覆盖。因为加载配置文件是具有顺序性的,后面的会覆盖掉前面有顺序的。

posted @ 2022-01-15 14:37  写的代码很烂  阅读(225)  评论(0编辑  收藏  举报