自动注入属性
@ConfigurationProperties("hospital.middleware")
@Data
public class HospitalProperties {
public static final String PREFIX = "hospital.middleware";
private String hosId;
private String hosName;
@NestedConfigurationProperty
private Gateway gateway = new Gateway();
public HospitalProperties() {
}
@Data
public static class Gateway {
private String[] urlPatterns = new String[]{
"/gateway/*"};
private String secret;
public Gateway() {
}
}
}
@Configuration
@EnableConfigurationProperties({
HospitalProperties.class})
public class HospitalAutoConfiguration {
public HospitalAutoConfiguration() {
}
}
once filter实现类
public class MiddlewareGatewayFilter extends OncePerRequestFilter {
private final Encrypt encrypt;
private final Logger logger = LoggerFactory.getLogger(MiddlewareGatewayFilter.class);
private final ObjectMapper objectMapper;
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
}
public MiddlewareGatewayFilter(final Encrypt encrypt, final ObjectMapper objectMapper) {
this.encrypt = encrypt;
this.objectMapper = objectMapper;
}
}
注册filter
@Configuration
public class GatewayAutoConfiguration {
private final HospitalProperties hospitalProperties;
@Bean
public FilterRegistrationBean<MiddlewareGatewayFilter> middlewareGatewayFilterFilterRegistrationBean() {
FilterRegistrationBean<MiddlewareGatewayFilter> bean = new FilterRegistrationBean();
bean.setFilter(new MiddlewareGatewayFilter(new Encrypt(this.hospitalProperties.getGateway().getSecret()), new JsonMapper()));
bean.setOrder(Integer.MAX_VALUE);
bean.setUrlPatterns(Arrays.asList(this.hospitalProperties.getGateway().getUrlPatterns()));
return bean;
}
public GatewayAutoConfiguration(final HospitalProperties hospitalProperties) {
this.hospitalProperties = hospitalProperties;
}
}
yaml
hospital:
middleware:
hos-id: 123456
hos-name: ${
spring.application.name}
gateway:
urlPatterns:
- /gateway/*
- /doc.html
- /v3/*