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文件中存在值,而在其他配置文件中也存在对应的值,那么其他配置文件中的值会来进行覆盖。因为加载配置文件是具有顺序性的,后面的会覆盖掉前面有顺序的。
从理论中来,到实践中去,最终回归理论