8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

当传递给 /oauth2/token 时,范围为 Null 或空,给出所有范围。传递范围后,获得正确的响应

Chirag Ashara 3月前

202 0

下面是我的 curl。我在 Spring Boot 安全应用程序中触发 /oauth2/token 端点。因此,当我在请求正文中提供适当的范围时。我在响应中以及在

下面是我的 curl。我正在 /oauth2/token Spring Boot 安全应用程序中触发端点。因此,当我在请求正文中给出适当的范围时。我在响应中以及在 access_token .

但是,问题是当我不传递范围(或为 null 空)时,我默认会获取响应中的所有范围以及我的 access_token JWT 中的内容。

带范围的 Curl:

curl --location 'http://localhost:9000/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Cookie: JSESSIONID=070D5BC0E37818B02C51DC62C7F52EF8' \ --data-urlencode 'client_id=***************' \ --data-urlencode 'client_secret=***************' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'scope=client.create'

无范围的卷曲:

curl --location 'http://localhost:9000/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Cookie: JSESSIONID=070D5BC0E37818B02C51DC62C7F52EF8' \ --data-urlencode 'client_id=***************' \ --data-urlencode 'client_secret=***************' \ --data-urlencode 'grant_type=client_credentials'

我尝试手动编写过滤器来捕获请求 /oauth2/token 并对其进行修改。但这个解决方案仍然不起作用。

我的要求:

有没有办法配置只获取我传递的范围。如果 null 请求中给出了范围或空范围。那么同样的方法应该应用于响应,也适用于我的 access_token .

帖子版权声明 1、本帖标题:当传递给 /oauth2/token 时,范围为 Null 或空,给出所有范围。传递范围后,获得正确的响应
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Chirag Ashara在本站《spring-boot》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 除非授权服务器限制范围,否则客户端会获得其请求的范围。对于其他授权类型,用户也可以限制范围。如果客户端没有请求任何范围,它将获得所有范围。您使用哪种授权服务器以及如何注册您的客户端?

  • 我有一个数据框(pandas),我想将其转换以用于显示目的。因此,我想将数据框的某些部分移动到新行,如下所示: col1 col2 col_to_shift col_not_to_shift1

    我有一个数据框(pandas),我想将其转换以用于显示目的。因此,我想将数据框的某些部分移动到新行,如下所示:

      col1 col2 col_to_shift col_not_to_shift1 col_not_to_shift2
    0   a1   a2           a3                a4                a5
    1   b1   b2          NaN                b4               NaN
    2   c1   c2           c3                c4                c5
    

    我想获得以下数据框,其中为 NaN 要移动的列中的值(如果不是)创建一个新行(唯一),复制和中包含的数据描述 col1 col2 保留我不想移动的列,即使它们包含NaN:

      col1 col2 col_to_shift col_not_to_shift1 col_not_to_shift2
    0   a1   a2           a3               NaN               NaN
    1   a1   a2          NaN                a4                a4
    2   b1   b2          NaN                b4               NaN
    3   c1   c2           c3               NaN               NaN
    4   c1   c2          NaN                c4                c4
    

    我尝试查看 pd.shift 但无法使其工作。

    以下是生成数据框的一段代码:

    data = {"col1": ['a1', 'b1', 'c1'], 'col2': ['a2', 'b2', 'c2'],
            'col_to_shift': ['a3', np.NaN, 'c3'],
            'col_not_to_shift1': ['a4', 'b4', 'c4'],
            'col_not_to_shift2': ['a5', np.NaN, 'c5']}
    df = pd.DataFrame(data)
    
  • 这是一个合理的观点,我澄清一下,因为我的例子没有完全重现我的数据框(我可以在那些我不想移动的列中使用 NaN)

  • 我正在尝试计算一个国家/地区两个不同年份之间的绝对变化 - 我在下面编写的代码是我为了完成此任务而创建的函数。但是我有...

    我正在尝试计算一个国家两个不同年份之间的绝对变化 - 我下面编写的代码是我为了完成此任务而创建的函数。但是,我在将计算结果打印到我创建的 excel 文件中时遇到了问题。

    运行代码时,仅填充了输出 Excel 文件上的“国家/地区”列,而不是“AC 更改”列,我不确定问题是什么,为什么结果仅打印到一列而不打印到另一列。

    这是包含我尝试分析的 Excel 文件的数据框的示例。

    df = pd.DataFrame({'Country': ['Austria', 'Austria'],
                       'REGION_2D': ['AT10', 'AT10'],
                       'Variable': ['ILOSTAT_W', 'ILOSTAT_W'],
                       'variable_type':[1, 1],
                       'value': [1798.52, 1804.577],
                       'YEAR': [2018, 2021]})
    

    这是我为其开发的代码。如能得到任何帮助我将非常感激。

    import pandas as pd
    import openpyxl as op
    
    
    df = pd.read_excel(r"C:\Users\blakecar\PycharmProjects\LFS Data\Mock File LFS.xlsx", sheet_name='Sheet1')
    
    output = pd.DataFrame()
    
    output["Country"] = ""
    output["Region"] = ""
    output["AC_Change"] = ''
    
    def func1(geog):
        print("------------")
        print(geog)
        print("------------")
        filtered_df = df[df["COUNTRY"].isin([geog])]
        filtered_df = filtered_df[filtered_df["REGION_2D"].isin(["AT10"])]
        filtered_df = filtered_df[filtered_df["Variable"].isin(["ILOSTAT_W"])]
    
        filtered_2018 = filtered_df[filtered_df["YEAR"].isin(["2018"])]
        total_2018 = filtered_2018['value'].sum()
    
        filtered_2021 = filtered_df[filtered_df['YEAR'].isin(["2021"])]
        total_2021 = filtered_2021['value'].sum()
    
        return total_2018 - total_2021
    
    geo = df['COUNTRY'].unique()
    for geog in geo:
        funcValue = func1(geog)
        output.loc[len(output)] = {"Country": geog, 'AC_change':funcValue}
    
    output.to_excel('Mock File.xlsx', index=False)
    
    

    我希望得到的输出是我在代码函数中所做计算的结果,所以它看起来像这样:

    国家 Ac_Change
    奥地利 2018 - 2021
  • 一个选项 的 concat :

    • 将 DataFrame 拆分为两部分,并保持两部分的分组列
    • 删除空行 dropna
    • 和稳定的排序算法 sort_values 对行进行排序
    group = ['col1', 'col2']
    cols  = df.columns[df.columns.str.contains('not_to_shift')]
    
    out = (pd.concat([df.drop(columns=cols).dropna(axis=0),
                      df[cols.union(group)].dropna(axis=0)
                     ])
             .sort_values(by=group, kind='stable')
          )
    

    输出:

      col1 col2 col_to_shift col_not_to_shift
    0   a1   a2           a3              NaN
    0   a1   a2          NaN               a4
    1   b1   b2          NaN               b4
    2   c1   c2           c3              NaN
    2   c1   c2          NaN               c4
    

    使用索引作为组的变体(这不维护原始索引):

    group = ['col1', 'col2']
    not_shift = ['col_not_to_shift']
    
    tmp = df.set_index(group)
    out = (pd.concat([tmp.drop(columns=not_shift), tmp[not_shift]])
             .dropna(how='all').sort_index(kind='stable')
             .reset_index()
          )
    

    或者通过定义要移动/不移动的列的列表:

    shift = ['col_to_shift']
    not_shift = ['col_not_to_shift1', 'col_not_to_shift2']
    
    out = (pd.concat([df.drop(columns=not_shift),
                      df.drop(columns=shift)
                     ])
             .dropna(subset=shift+not_shift, how='all')
             .sort_index(kind='stable')
          )
    

    输出:

      col1 col2 col_to_shift col_not_to_shift1 col_not_to_shift2
    0   a1   a2           a3               NaN               NaN
    0   a1   a2          NaN                a4                a5
    1   b1   b2          NaN                b4               NaN
    2   c1   c2           c3               NaN               NaN
    2   c1   c2          NaN                c4                c5
    
  • 您的问题似乎与 Excel 无关,因此我只关注 pandas 部分。

    您应该预先过滤 REGION_2D/Variable (例如使用 query ),然后运行 ​​groupby.sum ,最后切出感兴趣的年份,减去它们并 reset_index :

    total = (df
       .query('(REGION_2D in ["AT10"]) and (Variable in ["ILOSTAT_W"])')
       .groupby(['YEAR', 'Country'])['value'].sum()
    )
    
    out = (total.loc[2018] - total.loc[2021]).reset_index(name='AC_change')
    

    输出:

       Country  AC_change
    0  Austria     -6.057
    
  • 我正在使用 Spring WebFlux,我需要执行异步任务作为方法的一部分,该方法不应阻止对用户的主要响应。具体来说,我想调用一个异步方法

    我正在使用 Spring WebFlux,我需要在方法中执行异步任务,但该方法不应阻止对用户的主要响应。具体来说,我想在完成主要任务后调用异步方法,但不延迟响应。

    这是我想要实现的目标的简化版本:

    public Mono<ResponseDTO> publishPackage(RequestDTO requestDTO) {
        return publishPackageService.doSomething(requestDTO)
            .flatMap(responseDTO -> 
                doSomethingInAsync(requestDTO, responseDTO)
                    .thenReturn(responseDTO)
            );
    }
    
    // Method that simulates an asynchronous task with a 5-second delay
    public Mono<Void> doSomethingInAsync(RequestDTO requestDTO, ResponseDTO responseDTO) {
        return Mono.delay(Duration.ofSeconds(5))
            .then(); // Converts the delayed Mono<Long> to Mono<Void>
    }
    
    

    此调用完成后,我想 doSomethingInAsync(requestDTO, responseDTO) 异步执行。doSomethingInAsync 方法应该是非阻塞的,并且不会延迟主响应。问题:

    doSomethingInAsync 方法正在执行,但似乎可能阻止响应或未按预期异步运行。如何确保该方法 doSomethingInAsync 异步运行且不会阻止对用户的响应?

    细节:

    publishPackageService.doSomething(requestDTO): Returns a Mono<ResponseDTO>.
    

    doSomethingInAsync(requestDTO, responseDTO): 是一种我想在不阻塞响应的情况下运行的异步方法。

    问题:

    如何确保 doSomethingInAsync 在后台运行而不阻止响应?

  • 代码

    cols = ['col1', 'col2']
    out = pd.concat([
        df[cols + ['col_to_shift']].dropna(),
        df[cols + ['col_not_to_shift']].dropna()
    ]).sort_index().reset_index(drop=True)
    

    出去:

      col1 col2 col_to_shift col_not_to_shift
    0   a1   a2           a3              NaN
    1   a1   a2          NaN               a4
    2   b1   b2          NaN               b4
    3   c1   c2           c3              NaN
    4   c1   c2          NaN               c4
    
  • 您所说的“不打印”是什么意思?如果您想在终端/笔记本打印(输出)中打印它,如果您想将其导出为 excel,则 output.to_excel('Mock File.xlsx', index=False)。如果某些东西“不起作用”,您必须清楚地解释原因(解释您得到什么/在哪里/如何以及您期望得到什么/在哪里/如何)。

  • John 3月前 0 只看Ta
    引用 11

    谢谢,如果 col_not_to_shift 不包含 NaN 值,这可以正常工作,但我的数据框中就是这种情况,我已更新问题以反映这一点。

  • 尝试这个

    df1 = df[~df.col_to_shift.isnull()].drop(columns=['col_not_to_shift1', 'col_not_to_shift2'])
    df2 = df[~df.col_to_shift.isnull()].drop(columns='col_to_shift')
    pd.concat([df1, df2, df[df.col_to_shift.isnull()]], ignore_index=True).set_index(['col1', 'col2']).sort_index().reset_index()
    
  • 尝试这个:

    ((v:=df.set_index(['col1','col2']))
    .set_axis([v.columns != 'col_to_shift',v.columns],axis=1)
    .stack(level=0)
    .droplevel(-1)
    .reindex(v.columns,axis=1)
    .reset_index())
    

    输出:

      col1 col2 col_to_shift col_not_to_shift1 col_not_to_shift2
    0   a1   a2           a3               NaN               NaN
    1   a1   a2          NaN                a4                a5
    2   b1   b2          NaN                b4               NaN
    3   c1   c2           c3               NaN               NaN
    4   c1   c2          NaN                c4                c5
    
  • 引用 14

    @Toerktumlare 我已根据您的建议发布了此答案。这是您实际建议的吗?您能看一下吗?

  • 我正在尝试利用 sprint-boot-starter 启用 opentelemetry。我在 build.gradle 文件中添加了 io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter。但是,应用程序通过...

    我正在尝试利用 sprint-boot-starter 启用 opentelemetry。我已将其添加 io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter build.gradle 文件中。但是,应用程序在启动时会抛出以下错误:

    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk]: Factory method 'autoConfiguredOpenTelemetrySdk' threw exception with message: io/opentelemetry/sdk/autoconfigure/spi/internal/AutoConfigureListener Caused by: java.lang.ClassNotFoundException: io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener
    

    build.gradle 文件的部分:

    implementation 'io.opentelemetry:opentelemetry-bom:1.40.0-alpha'             
    implementation 'io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.6.0'             
    implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter:2.6.0'             
    implementation 'io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.40.0'             
    implementation 'io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.40.0'
    

    不确定依赖项缺少什么。有什么想法可以解决这个问题吗?我发现了此处提到的类似问题 11812

    谢谢

  • 谢谢,清理完毕,错误已经消失。但是,我只看到执行器健康端点的跟踪,而看不到任何特定于应用程序的服务。我认为应用程序默认启用。我们需要指定任何设置吗?

  • 我有一个关于如何使用条件合并数据框的问题。我有两个数据框df1 Pro fgmaterial_df1 qty_df1 1 f01 m01 1 1 f01 m02 1 1 f01 m03 1 1 f01 m05 1 2 f01 m01 2 ...

    我有一个关于如何使用条件合并数据框的问题。

    我有两个数据框

    df1

    Pro fg 材料_df1 数量_df1
    1 f01 m01 1
    1 f01 m02 1
    1 f01 m03 1
    1 f01 m05 1
    2 f01 m01 2
    2 f01 m03 2

    df2
    fg 材料_df2 数量_df2
    fg01 m01 1
    fg01 m02 1
    fg01 m03 1
    fg01 m04 1

    结果:按 PRO 列条件合并

    结果数据框:
    PRO fg 材料_df1 数量_df1 材料_df2 数量_df2
    1 f01 m01 1 m01 1
    1 f01 m02 1 m02 1
    1 f01 m03 1 m03 1
    1 f01 南 南 m04 1
    1 f01 m05 1 南南
    2 f02 m01 2 m01 1
    2 f02 m03 2 m03 1
    2 f02 南 南 m02 1
    2 f02 南 南 m04 1

    在此处输入图片描述

  • 因此,我尝试创建一个列表,从数据框中的高度列检查高度是否高于 70,如果高度在 66 到 70 之间,则附加 1,否则附加...

    因此,我尝试创建一个列表,从数据框中的高度列检查高度是否高于 70,如果高度在 66 到 70 之间,则添加 1,否则在名为“tall”的新列表中添加 0。

    tall = []
    for i in range(len(newdf)):
        if newdf['height'][i]>70:
            tall.append(2)
        elif newdf['height'][i]>66 & newdf['height'][i]<70:
            tall.append(1)
        else:
            tall.append(0)
    
  • 引用 19
    1. & 关键字用于按位运算。我猜你的意思是使用 and .
    2. Python 是快捷语言。应不惜一切代价避免使用 for 循环,并且 numpy pandas.DataFrame 本质上是一系列 numpy 数组)将为我们完成这项工作。
    import pandas as pd
    
    # For minimal working example
    newdf = pd.DataFrame(list(zip([77, 79, 67, 55, 44, 10, 1])), columns=["height"])
    
    # Initialize 'tall' column
    newdf["tall"] = 0
    # Broadcast conditions
    newdf.loc[newdf.height > 66, "tall"] = 1
    newdf.loc[newdf.height > 70, "tall"] = 2
    
    print(newdf)
    

    如果你确实希望输出一个列表:

    print(newdf.tall.to_list())
    

    输出:

       height  tall
    0      77     2
    1      79     2
    2      67     1
    3      55     0
    4      44     0
    5      10     0
    6       1     0
    [2, 2, 1, 0, 0, 0, 0]
    
  • @user19077881 我指的是 OP 代码第五行的 &(它是布尔值的比较,而不是 pandas 系列,所以应该是 and)。但我同意我可以将它与第二个条件一起使用:(newdf.height > 66) & (newdf.height <= 70)

返回
作者最近主题: