精华内容
下载资源
问答
  • 但是token校验重构完之后出问题了,之前写filter走的是springgateway,基于GatewayFilter实现,重构了之后基于filter,然后当请求进入过滤器的时候,发现不能获取到请求的自定义请求头。String token = request....

    有个钱包项目,本来用的是微服务这一套,后来感觉没必要,重构成了简单的springboot项目,但是token校验重构完之后出问题了,之前写filter走的是springgateway,基于GatewayFilter实现,重构了之后基于filter,然后当请求进入过滤器的时候,发现不能获取到请求的自定义请求头。

    String token = request.getHeader("token"); // null

    String id = request.getHeader("id"); // null

    String role = request.getHeader("role"); // null

    原因

    我在进入断点的时候查看了一下servletRequest,发现请求方法是options。 我知道get post delete put。还真不了解options,百度了下。主要参考这篇文章。原来是浏览器的同源策略问题,也就是cors,可我一想,我配置了cors啊

    @Configuration

    public class CorsConfig {

    private CorsConfiguration buildConfig() {

    CorsConfiguration corsConfiguration = new CorsConfiguration();

    corsConfiguration.addAllowedOrigin("*"); // 1

    corsConfiguration.addAllowedHeader("*"); // 2

    corsConfiguration.addAllowedMethod("*"); // 3

    return corsConfiguration;

    }

    @Bean

    public CorsFilter corsFilter() {

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

    source.registerCorsConfiguration("/**", buildConfig()); // 4

    return new CorsFilter(source);

    }

    }

    怎么还报跨域的问题呢,想起来了我的tokenFilter里因为拿不到请求头token,我抛出了参数异常,然后@RestControllerAdvice跟@ExceptionHandle处理不了filter中抛出的异常,导致程序报500错误,然后过滤器是类似于切面的 么,这里断了导致返回头也没加上。

    处理

    怎么处理浏览器发过来的预处理 options请求呢,太懒了,直接这样写了

    HttpServletRequest request= (HttpServletRequest)servletRequest;

    HttpServletResponse res = (HttpServletResponse) servletResponse;

    String method=request.getMethod();

    if(HttpMethod.OPTIONS.toString().equals(method)){

    res.setStatus(HttpStatus.NO_CONTENT.value());

    }else {

    String token = request.getHeader("token");

    String id = request.getHeader("id");

    String role = request.getHeader("role");

    ~~~~~~~

    回想

    我记得我上个项目也没处理options请求啊,怎么没报cors问题啊,对了我记得我在nginx处理过了

    if ($request_method = 'OPTIONS') {

    return 204;

    }

    add_header Access-Control-Allow-Origin * always;

    add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;

    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, PATCH, DELETE, HEAD" always;

    add_header Access-Control-Max-Age 86400 always;

    原来自己又写前端,也写后端,怎么这些问题还能碰到呢,:relieved:,前辈们都写好了,自己还没遇到问题也没深入过,还有springcloud里面的corsWebFilter怎么就跟springboot里面的corsFilter不一样呢。

    @Configuration

    public class CorsConfig {

    @Bean

    public CorsWebFilter corsFilter() {

    CorsConfiguration config = new CorsConfiguration();

    config.addAllowedMethod("*");

    config.addAllowedOrigin("*");

    config.addAllowedHeader("*");

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());

    source.registerCorsConfiguration("/**", config);

    return new CorsWebFilter(source);

    }

    }

    还是得多看源码啊,我这个crudboy

    总结

    以上所述是小编给大家介绍的springboot使用filter获取自定义请求头的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • 在下面的教程中,我们将演示如何将自定义HTTP添加到HttpClient和Http请求方法。Maven依赖关系我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。pom.xml 文件的...

    HTTP消息可以包含许多描述消息属性的标头,例如内容长度,内容类型,授权等。 HttpClient提供了检索,添加,删除和枚举标头的方法。 在下面的教程中,我们将演示如何将自定义HTTP头添加到HttpClient和Http请求方法。

    Maven依赖关系

    我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。

    pom.xml 文件的内容如下 -

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

    http://maven.apache.org/xsd/maven-4.0.0.xsd">

    4.0.0

    com.yiibai.httpclient.httmethods

    http-get

    1.0.0-SNAPSHOT

    https://memorynotfound.com

    httpclient - ${project.artifactId}

    org.apache.httpcomponents

    httpclient

    4.5.2

    maven-compiler-plugin

    3.5.1

    1.8

    1.8

    自定义HTTP头示例

    HttpClient允许我们添加,编辑,删除或枚举http头。 首先来看看在HttpClient上设置默认标头。 接下来,我们在消息上添加自定义HTTP请求标头。

    文件:HttpClientRedirectHandlingExample.java -

    package com.yiibai.httpdemo;

    import org.apache.http.Header;

    import org.apache.http.HttpEntity;

    import org.apache.http.HttpHeaders;

    import org.apache.http.client.ClientProtocolException;

    import org.apache.http.client.ResponseHandler;

    import org.apache.http.client.methods.HttpUriRequest;

    import org.apache.http.client.methods.RequestBuilder;

    import org.apache.http.impl.client.CloseableHttpClient;

    import org.apache.http.impl.client.HttpClients;

    import org.apache.http.message.BasicHeader;

    import org.apache.http.util.EntityUtils;

    import java.io.IOException;

    import java.util.Arrays;

    import java.util.List;

    /**

    * This example demonstrates how to use custom http headers.

    */

    public class HttpClientCustomHeadersExample {

    public static void main(String... args) throws IOException {

    // create custom http headers for httpclient

    List defaultHeaders = Arrays.asList(

    new BasicHeader("X-Default-Header", "default header httpclient"));

    // setting custom http headers on the httpclient

    CloseableHttpClient httpclient = HttpClients

    .custom()

    .setDefaultHeaders(defaultHeaders)

    .build();

    try {

    // setting custom http headers on the http request

    HttpUriRequest request = RequestBuilder.get()

    .setUri("http://httpbin.org/headers")

    .setHeader(HttpHeaders.CONTENT_TYPE, "application/json")

    .setHeader(HttpHeaders.FROM, "https://memorynotfound.com")

    .setHeader("X-Custom-Header", "custom header http request")

    .build();

    System.out.println("Executing request " + request.getRequestLine());

    // Create a custom response handler

    ResponseHandler responseHandler = response -> {

    int status = response.getStatusLine().getStatusCode();

    if (status >= 200 && status < 300) {

    HttpEntity entity = response.getEntity();

    return entity != null ? EntityUtils.toString(entity) : null;

    } else {

    throw new ClientProtocolException("Unexpected response status: " + status);

    }

    };

    String responseBody = httpclient.execute(request, responseHandler);

    System.out.println("----------------------------------------");

    System.out.println(responseBody);

    } finally {

    httpclient.close();

    }

    }

    }

    执行上面示例代码,得到以下结果 -

    Executing request GET http://httpbin.org/headers HTTP/1.1

    ----------------------------------------

    {

    "headers": {

    "Accept-Encoding": "gzip,deflate",

    "Connection": "close",

    "Content-Type": "application/json",

    "From": "https://memorynotfound.com",

    "Host": "httpbin.org",

    "User-Agent": "Apache-HttpClient/4.5.5 (Java/1.8.0_65)",

    "X-Custom-Header": "custom header http request",

    "X-Default-Header": "default header httpclient"

    }

    }

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • 本文将通过实例阐述如何通过Spire.Cloud.Word API给开发人员提供的DocumentPropertiesApi接口,来添加、获取和删除Word文档自定义属性。 详细步骤: 1、通过冰蓝云官网( https://cloud.e-iceblue.cn/)注册账号并...

    前言:

    Spire.Cloud 在线编辑器是一款基于网页的 Office 文件编辑工具,支持在网页中打开、编辑、打印 Word、Excel、PPT 文件,支持将文档保存到私有云盘。支持 IE、Chrome、FireFox、搜狗、遨游、360 等常见浏览器。Spire.Cloud Web API 能帮助开发人员能在任何时间、任何地点直接调用 SDK 接口对 Word、Excel、PPT、PDF 文档进行操作。Spire.Cloud 支持 .NET、Java、PHP、Python、JavaScript 等多种编程语言,并提供了 1 万次的免费调用次数及 2G 文档内存。

    本文将通过实例阐述如何通过Spire.Cloud.Word API给开发人员提供的DocumentPropertiesApi接口,来添加、获取和删除Word文档自定义属性。

    详细步骤:

    1、通过冰蓝云官网( https://cloud.e-iceblue.cn/)注册账号并登陆,在“我的应用”版块创建应用程序,获得App ID及App Key。

    dc849ba9822c2183e5eaece69c0a15ae.png

    2、上传Word文档至冰蓝云官网的“文档管理”版块。为了便于文档管理,您也可以先创建文件夹“input”和“output”,然后将需要编辑的Word文档上传至input文件夹下,output文件夹用于存放生成的文档。

    8f2338a21b9ff93eb7718bb7ec4b30ee.png

    3、创建Maven应用程序,通过Maven仓库安装Spire.Cloud.SDK jar包及依赖。详细步骤参考 文章 。

    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>cloud</name>
            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
                <groupId> cloud </groupId>
                <artifactId>spire.cloud.sdk</artifactId>
                <version>3.5.0</version>
            </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.18</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp</groupId>
            <artifactId>okhttp</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp</groupId>
            <artifactId>logging-interceptor</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId> com.squareup.okio </groupId>
            <artifactId>okio</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.1</version>
        </dependency>
        <dependency>
            <groupId>io.gsonfire</groupId>
            <artifactId>gson-fire</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.threeten</groupId>
            <artifactId>threetenbp</artifactId>
            <version>1.3.5</version>
        </dependency>
    </dependencies>

    4、新建Java class,输入Java代码来实现添加、获取和删除 Word 文档自定义属性。

    示例1、添加自定义文档属性

    import spire.cloud.word.sdk.client.*;
    import spire.cloud.word.sdk.client.api.DocumentPropertiesApi;
    import spire.cloud.word.sdk.client.model.*;
    import java.util.ArrayList;
    import java.util.List;
    public class addCustomDocumentProperties {
        static String appId = " APP ID "; 
        static String appKey = " APP Key ";
        static String baseUrl = "https://api.e-iceblue.cn";
        //配置APP ID和APP Key
        static Configuration wordConfiguration = new Configuration(appId, appKey, baseUrl);
        //创建documentPropertiesApi实例
        static DocumentPropertiesApi documentPropertiesApi = new DocumentPropertiesApi(wordConfiguration);
        public static void main(String[] args) throws ApiException {
            //示例文档名称
            String name = "test.docx";
            //示例文档的密码
            String password = null;
            //存放示例文档的文件夹
            String folder = "input";
            //使用冰蓝云默认的存储空间
            String storage = null;
            //输出文档存放路径
            String destFilePath = "output/addCustomDocumentProperties_out.docx";
            //设置自定义文档属性
            List properties = new ArrayList();
            properties.add(new CustomDocumentProperty("Name1", "Value1"));
            properties.add(new CustomDocumentProperty("Name2", "Value2"));
            //调用addCustomDocumentProperties添加自定义文档属性
            documentPropertiesApi.addCustomDocumentProperties(name, properties, destFilePath, password, folder, storage);
        }
      }

    2355b08170e0c8faa976f5aae0c24248.png

    示例2、获取自定义文档属性

    import spire.cloud.word.sdk.client.*;
    import spire.cloud.word.sdk.client.api.DocumentPropertiesApi;
    import spire.cloud.word.sdk.client.model.*;
    import java.util.List;
    public class getCustomDocumentProperties {
        static String appId = " APP ID "; 
        static String appKey = " APP Key ";
        static String baseUrl = "https://api.e-iceblue.cn";
        //配置APP ID和APP Key
        static Configuration wordConfiguration = new Configuration(appId, appKey, baseUrl);
        //创建documentPropertiesApi实例
        static DocumentPropertiesApi documentPropertiesApi = new DocumentPropertiesApi(wordConfiguration);
        public static void main(String[] args) throws ApiException {
            //示例文档名称
            String name = "Sample.docx";
            //示例文档的密码
            String password = null;
            //存放示例文档的文件夹
            String folder = "input";
            //使用冰蓝云默认的存储空间
            String storage = null;
            //调用getCustomDocumentProperties读取自定义文档属性
            List response = documentPropertiesApi.getCustomDocumentProperties(name, password, folder, storage);
            System.out.println(response);
        }
      }

    56349b03738b20c6e6384dbce4ecc524.png

    示例3、删除自定义文档属性

    import spire.cloud.word.sdk.client.*;
    import spire.cloud.word.sdk.client.api.DocumentPropertiesApi;
    public class deleteCustomDocumentProperties {
        static String appId = " APP ID "; 
        static String appKey = " APP Key ";
        static String baseUrl = "https://api.e-iceblue.cn";
        //配置APP ID和APP Key
        static Configuration wordConfiguration = new Configuration(appId, appKey, baseUrl);
        //创建documentPropertiesApi实例
        static DocumentPropertiesApi documentPropertiesApi = new DocumentPropertiesApi(wordConfiguration);
        public static void main(String[] args) throws ApiException {
            //示例文档名称
            String name = "Sample.docx";
            //示例文档自定义属性中需要删除的项目
            String propertieName = "Owner";
            //示例文档的密码
            String password = null;
            //存放示例文档的文件夹
            String folder = "input";
            //使用冰蓝云默认的存储空间
            String storage = null;
            //输出文档存放路径
            String destFilePath = "output/deleteCustomDocumentProperties_output.docx";
            //调用deleteCustomDocumentProperty删除指定的自定义文档属性
            documentPropertiesApi.deleteCustomDocumentProperty(name, propertieName, destFilePath, password, folder, storage);
        }
      }
    展开全文
  • 前后端分离项目,后端为JAVA自定义请求头header MY_TOKEN做鉴权,开发环境前端请求接口,运行正常。 部署至服务器,使用nginx做了代理,进行转发。此时奇怪的事情发生了,服务端取不到 自定义headerMY_TOKEN 的...

    问题现象:

    • 前后端分离项目,后端为JAVA,自定义请求头header MY_TOKEN 做鉴权,开发环境前端请求接口,运行正常。
    • 部署至服务器,使用nginx做了代理,进行转发。此时奇怪的事情发生了,服务端取不到 自定义header MY_TOKEN 的内容了

    分析:

    出现异常,无非是因为nginx做转发引起的。推测应该nginx转发没有携带请求头引起的,查找资料发现

    句法: underscores_in_headers on | off;
    默认:
    underscores_in_headers off;
    内容: http, server

    Enables or disables the use of underscores in client request header fields. When the use of underscores is disabled, request header fields whose names contain underscores are marked as invalid and become subject to the ignore_invalid_headers directive.

    意思就是:在客户端请求标头字段中启用或禁用下划线。禁止使用下划线时,名称中包含下划线的请求标头字段将被标记为无效,并受ignore_invalid_headers指令的约束 。

    于是乎,在nginx.conf配置文件中增加

    underscores_in_headers on;

    配置,可以加在keepalive_timeout  65; 下面。

    重启nginx服务,使配置生效,再次测试可以取到自定义请求头的内容了。

    展开全文
  • 在配置Nginx做转发的时候,踩了一个不错的坑,这个坑是这样的,后端在获取请求头的值得时候,一直取到的是null,比如java httpRequest.getHeader("jwt_token") 这个一直返回null,原因是Nginx的配置 underscores...
  • Spring Boot 2.2.4.RELEASE 实现 新建 Spring Boot 项目,引入依赖: <project> <properties>...java.version>1.8</java.version> <springfox-swagger2.version>2.9.2</spr...
  • 1.创建@interface自定义注解 import java.lang.annotation.*; @Target(ElementType.METHOD)//指定被修饰的Annotation可以放置的位置:方法上面 @Retention(RetentionPolicy.RUNTIME)//注解会在class字节码文件中...
  • 我正在努力实现以下目标。从请求中读取自定义标题及其值...当我发送请求URL Http:// localhost / test /时,请求头也被传递(暂时是Firefox插件 – 对它们进行编码)。在接收到该URL的请求时,将调用以下方法:@GET...
  • 项目场景:基于Spring MVC的Web项目,Controller类中的处理Http请求的方法,对Http的请求头域有特定的要求或对头域通过检测才继续响应。 本文例子的做法思路如下:自定义一个Java注解,利用Spring的aop编程对标注有...
  • import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.List; import...
  • 可以利用Java语言根据需要添加自定义的HTTP字段,而不必拘泥于标准HTTP定义的字段。代码如下:public class TestURL {public static void main(String[] args) {String destURLStr= "http://www.baidu.c...
  • 修改post请求参数的请参照我的https://blog.csdn.net/qq_34468174/article/details/106665093,两者进行整合也许可以实现你需要的功能,比如根据不同请求方式、请求头分别采用不同逻辑处理请求参数! 1.场景:将...
  • 获取Http请求头自定义属性值 java

    千次阅读 2018-06-25 17:00:17
    低版本安卓端请求接口时在请求头中设置了版本信息相关属性,但是低版本IOS端并没有写入版本信息相关属性。所以,需要对请求头中的属性进行验证。思路:1、使用HttpServletRequest,判断请求头中是否存在版本信息相关...
  • 本文实例讲述了java获取HTTP请求头的方法。分享给大家供大家参考,具体如下:在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;可以利用Java语言根据需要添加自定义的HTTP头字段,而不必拘泥于...
  • 本文实例讲述了JAVA获取HTTP请求头的方法。分享给大家供大家参考,具体如下:在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;可以利用Java语言根据需要添加自定义的HTTP头字段,而不必拘泥于...
  • JAVA如何获取HTTP请求头在利用Java网络编程时,常常需要获取HTTP请求头,那么JAVA如何获取HTTP请求头呢?下面小编为大家介绍了JAVA获取HTTP请求头的.方法,希望能帮到大家!在利用Java网络编程时,利用Java获取...
  • 在利用Java网络编程时,常常需要获取HTTP请求头,那么JAVA如何获取HTTP请求头呢?下面小编为大家介绍了JAVA获取HTTP请求头的方法,希望能帮到大家!在利用Java网络编程时,利用Java获取HTTP Request 和 Response头...
  • 本文实例讲述了JAVA获取HTTP请求头的方法。分享给大家供大家参考,具体如下:在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;可以利用Java语言根据需要添加自定义的HTTP头字段,而不必拘泥于...
  • 2. 表达式语言的内置对象使用表达式语言可以直接获取请求参数,可获取页面中某个JavaBean的属性值,获取请求头及获取session属性值等,这些都得益于表达式语言的内置对象。表达式语言包含如下11 个内置对象。...
  • 当我们feign调用提供者需要携带自定义请求头,或者想继续传递上游服务的请求头信息时,可进行如下方式处理 实现RequestInterceptor,并Configuration注解标记为配置类 复写apply 方法,将我们的自定义请求头 ...
  • java自定义下载文件名中文乱码问题

    千次阅读 2018-03-07 10:21:37
    使用java实现文件下载并重命名时出现文件名中文乱码问题时,只需要对请求头的文件名进行utf-8编码即可response.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode...
  • 本文实例讲述了JAVA获取HTTP请求头的方法。分享给大家供大家参考,具体如下:在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;可以利用Java语言根据需要添加自定义的HTTP头字段,而不必拘泥于...
  • 作为一个更大的项目的一部分,我不得不制作一个自定义Java线程池服务器。自至少一个昼夜以来,我遇到了一个伤害我头部内神经元的问题。我所做的很简单(在在线资源之后)。我有一个while循环,它会永远循环。发出一...
  • 自定义OKhttp拦截器 添加请求头

    千次阅读 2017-11-22 14:30:59
    新建一个类UserAgentInterceptor实现Interceptor [html] view plain copy ...import java.io.IOException;    import okhttp3.Interceptor;  import okhttp3.Request;  import okhttp3.Resp
  • JAVA如何取得HTTP请求头

    千次阅读 2017-04-27 11:18:57
    可以利用Java语言根据需要添加自定义的HTTP字段,而不必拘泥于标准HTTP定义的字段。 代码如下: public class TestURL { public static void main(String[] args) { String de
  • JAVA HTTPclient中增加自定义的属性

    千次阅读 2016-07-10 14:45:27
    场景是这样的,第三方页面访问需要鉴权,所以需要在HTTP中增加鉴权的属性和内容发送给第三方网页...我试过用response.addHeader("Authorization","xxxxxxxxx")方法,但发送的请求还是不带Authorization属性,还请大
  • 问题:由于下载文件需要带头部的时区或者token,所以不能模拟a标签重新请求, 已解决: 前端如下 1. 我的请求 isDownload: true, ...responseType: 'blob', // arraybuffer ...加入一个重要的自定义头部 ...
  • 添加请求头 自定义请求头拦截器: package me.goldze.mvvmhabit.http.interceptor; import java.io.IOException; import java.util.Map; import java.util.Set; import okhttp3.Interceptor; import...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 260
精华内容 104
关键字:

java自定义请求头

java 订阅