杂记
跨域问题设置
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "1728000");
response.setHeader("Access-Control-Allow-Headers", "TOKEN");
response.setHeader("Content-Type", "application/json;charset=utf-8");
1.Access-Control-Allow-Origin
设置请求源,只有设置的才可以访问资源。例如
Access-Control-Allow-Origin: www.xxx.com,那么这个请求资源只针对www.xxx.com的域名是可访问的
Access-Control-Allow-Origin: * , 这个设置表示任何源都能访问
Origin是源,同源策略导致的跨域问题,同源就是说服务端和前端(请求端)要是在同一个协议同一个域名同一个端口下。
2.Access-Control-Allow-Methods
控制请求被允许的请求方式
Access-Control-Allow-Methods : POST, GET, OPTIONS, DELETE ,表示被允许的请求方式只能是POST, GET, OPTIONS, DELETE
Access-Control-Allow-Methods: * 表示任何请求方式都运行访问
3.Access-Control-Max-Age
设置预检查保留时间。Preflighted Requests是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。
Access-Control-Max-Age: 1800 设置保留时间 为1800s,在相同时间内 【同一个请求】不在发起OPTIONS请求
4.Access-Control-Allow-Headers
设置允许请求头携带的参数。
Access-Control-Allow-Headers: TOKEN 请求要携带TOKEN
response.setHeader(“Content-Type”, “application/json;charset=utf-8”); 这是用来设置影响的内容格式及编码的。
swagger的配置
配置:
@EnableSwagger2
// 启动bean校验 jsr303
@Import(BeanValidatorPluginsConfiguration.class)
@Configuration
public class Swagger2Config {
String basePackage = "com.payment.xxx.controller";
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
// 要扫描的api的包路径
.apis(RequestHandlerSelectors.basePackage(basePackage))
.paths(PathSelectors.any()).build();
}
// 配置接口文档的信息
public ApiInfo apiInfo() {
return new ApiInfoBuilder()
.description("xxx系统接口文档")
.title("PAYMENT")
.version("V1.0")
.build();
}
}
设置全局参数,比如用户登录后获取token,下次请求要在请求头携带token,这里可以设置为全局的:
@EnableSwagger2
// 启动bean校验 jsr303
@Import(BeanValidatorPluginsConfiguration.class)
@Configuration
public class Swagger2Config {
String basePackage = "com.payment.xxx.controller";
@Bean
public Docket docket() {
// 构建参数
ParameterBuilder parameterBuilder = new ParameterBuilder();
Parameter parameter = parameterBuilder.name("TOKEN")
.description("用户身份令牌")
.modelRef(new ModelRef("String"))
.parameterType("header")
.required(false)
.build();
List<Parameter> params = new ArrayList<>();
params.add(parameter);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(basePackage))
.paths(PathSelectors.any()).build()
// 设置为全局参数
.globalOperationParameters(params);
}
// 配置接口文档的信息
public ApiInfo apiInfo() {
return new ApiInfoBuilder()
.description("xxx系统接口文档")
.title("PAYMENT")
.version("V1.0")
.build();
}
}