Spring Boot 与 Jersey 和 Spring Security OAuth2

2024-02-14

以下是 Spring Boot 的示例:来自 GitHub 的示例代码 https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-jersey一切似乎都工作正常。

但是,当我在项目中集成 Spring Boot Security OAuth2 时,我的 OAuth2 端点停止工作。日志中有一条警告:

2017-05-04 08:56:24.109 WARN 2827 --- [nio-8080-exec-1] o.glassfish.jersey.servlet.WebComponent : A servlet request to the URI http://127.0.0.1:8080/oauth/token contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.

这让我想到即使我没有注册端点,Jersey 也会捕获它并处理正文,从而使 Spring MVC 无法接受请求......

我的泽西岛配置是:

@Component
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        register(InfoController.class);
    }

}

我的信息控制器非常简单:

@Component
@Path("/me")
@Produces("application/json")
public class InfoController {
  @GET
  public String meAction() {
    return "Hi";
  }
}

最后,我试图拨打的电话导致日志中出现警告:

curl -X POST -u CLIENT_APPLICATION:123456789 http://127.0.0.1:8080/oauth/token -H "Accept: application/json" -d "password=aaa&username=aa&grant_type=password&client_id=CLIENT_APPLICATION"

这两个项目之间是否存在已知的不兼容性(spring-boot-starter-jersey and spring-security-oauth2从这个意义上说?

删除 Jersey 配置使其一切正常,但我需要在我的控制器上使用它。

我的 OAuth2 配置是:

@Configuration
public class OAuth2ServerConfiguration {
  @Configuration
  @EnableResourceServer
  protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
      resources.resourceId("OAuth2 Server");
    }
    @Override
    public void configure(HttpSecurity http) throws Exception {
      // @formatter:off
      http
          .authorizeRequests()
          .antMatchers("/oauth/token").permitAll()
          .antMatchers("/*").authenticated();
      // @formatter:on
    }
  }
}

然后是安全配置本身:

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

  private final ApiUserDetailsService userDetailsService;

  @Autowired
  public WebSecurityConfiguration(ApiUserDetailsService userDetailsService) {
    this.userDetailsService = userDetailsService;
  }

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService);
  }

  @Bean
  @Override
  public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
  }
}

提前致谢!


Jersey 似乎正在尝试处理 OAuth 端点,但事实并非如此。原因是 Jersey 的默认映射是/*,这意味着它将处理所有 URL 的请求。您可以通过以下几种方式来改变它:

  1. Add an @ApplicationPath在你的上面ResourceConfig具有不同映射的子类

    @Component
    @ApplicationPath("/api")
    public class JerseyConfig extends ResourceConfig {}
    
  2. 您可以将映射添加到您的application.properties file

    spring.jersey.application-path=/api
    

这将做什么是前缀/api到您的所有 Jersey 端点,并且还会导致 Jersey 不处理所有请求,仅处理以/api.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 与 Jersey 和 Spring Security OAuth2 的相关文章

随机推荐

  • 如何在vue loader组件中导入JS脚本?

    我有一个 vue 组件 vue 组件 vue loader
  • 将带有辅助 y 轴的 pandas 条形图图例放在条形前面

    我有一个带有辅助 y 轴的 pandas DataFrame 我需要一个条形图 条形图前面有图例 目前 图例前面有一组酒吧 如果可以的话 我还想把图例放在左下角 任何想法表示赞赏 我尝试设置 legend false 并添加自定义图例 但它
  • AVD 模拟器被杀 - Mac

    我花了一整天的时间尝试了在 stackoverflow 上的多个问题和数十个谷歌结果中找到的所有方法 简短摘要 重新启动电脑 删除并重新创建 AVD 将 AVD 图形更改为软件 在 AVD 管理器中和直接在文件中 在 SDK 管理器中重新安
  • 具有动态数据类型的 C 模块化数据结构

    对于我即将进行的大学 C 项目 我被要求拥有 C 允许的模块化代码 基本上 我将拥有一些数据结构的 c 文件和相应的 h 文件 例如链表 二叉树 哈希表等 以链表为例 我有这样的 typedef struct sLinkedList int
  • 如何获取点击的listviewitem的上一项

    我有两项活动 在 Activity1 中 我有从数据库填充的列表视图 单击项目后 它应该转到 Activity2 Activity2 包含两个按钮 下一个和上一个 并显示产品详细信息 我试图获取单击的列表视图项目的上一个项目并在按钮中设置文
  • matplotlib 情节之外的两个图例

    我面临着在情节之外显示两个图例的问题 显示多个图例inside绘图很简单 matplotlib 文档中通过示例对其进行了描述 即使在情节之外显示一个图例也相当容易 正如我在 stackoverflow 上发现的那样 例如here https
  • 是否有 T4 模板可用于从 xsd 生成 c# 类?

    是否有 T4 模板可用于从 xsd 生成 c 类 据我所知 但看看 LINQ to XSD http linqtoxsd codeplex com http linqtoxsd codeplex com 您可以使用 LinqToXsd ex
  • MacOS 10.8 的 rxtxSerial.dll

    我目前正在开发一个 ZigBee 项目 并在装有 Mountain Lion 10 8 的 Mac 上并使用 Eclipse IDE 进行编程 要通过 USB 使用我的 Zigbee 模块进行串行通信 我需要这个 rxtxSerial dl
  • PropTypes React Native 不是一个对象

    我的代码在本地反应时遇到 PropTypes 问题 import React Component PropTypes from react import Text from react native export default class
  • 如何使用控制台删除 GitLab 中的文件夹

    我错误地创建了一个名为src在我的 GitLab 存储库中 现在我想删除此文件夹 我尝试了多种方法来删除它 但我只能在本地删除它 而不能在我的 GitLab 存储库中删除它 该文件夹仍然存在 我想删除它 我已经尝试过这些命令 git rm
  • Python:Beautifulsoup 返回 None 或 [ ]

    你好 我正在练习我的请求和网络抓取技巧 所以我尝试抓取 youtube 上的趋势页面 并提取趋势视频的标题 这是这个链接youtube https www youtube com feed trending 这是我正在运行的代码 impor
  • 为什么ie7总是处于Quirks模式?

    这是我正在使用的 DOCTYPE 和 XML 声明 但 IE7 仍然总是进入怪异模式 有人知道为什么吗 提前致谢 如果 DOCTYPE 之前有任何内容除了 XML 序言之外 那么你就会在IE7中触发怪异模式 这包括空白和注释 XML pro
  • Python 根据条件关闭任务

    我使用 AsyncIO 和 Websockets 模块在 Python 中创建两个并发任务 每个任务都连接到 Websocket 服务器并接收消息 我正在尝试创建一个系统 当任务超过 4 秒没有收到消息时 它必须关闭连接和任务 但我很难弄清
  • 如何在 Arduino 上比较 __FlashStringHelper* 和 char*?

    我有一个将文本行输出到串行的板 我需要将这些文本行与我所知道的文本进行比较 本质上 我想做strcmp thestring F knownstring 但是似乎没有一个采用 FlashStringHelper 类型的 strcmp 版本 有
  • 是否可以通过引用返回临时对象

    是否可以从函数返回引用 如以下示例代码所示 string erase whitespace string text text erase etc return text Call string text erase whitespace s
  • jquery 和 random.org“Access-Control-Allow-Origin 不允许”

    我在使用 jQuery 从 random org 请求随机数时遇到问题 当我使用静态页面和以下 JavaScript 时 获取随机数没有任何问题 但是 我在 Heroku 上托管一个 Sinatra 应用程序 此外 当使用 Thin 在生产
  • 如何启动默认启用深色主题的 jupyter lab?

    答案是这个问题 https stackoverflow com questions 40518614 how to apply theme to jupyter lab指出 JupyterLab Dark 主题现在作为原版的一部分提供jup
  • 在巨大的 gzip 文件顶部添加一行

    我有一个巨大的 gzip 文件 400MB 我想在文件的开头附加一行文本 我正在考虑创建一个带有标题行的 gzip 文件 然后使用zcat合并头文件和日志文件 只是想检查是否有更好 优雅 有效的方法来做到这一点 两个 gzip 压缩文件连接
  • 无法使用 Transform 删除 Web.Config 节点

    我有一个包含这样的重写规则的 web config
  • Spring Boot 与 Jersey 和 Spring Security OAuth2

    以下是 Spring Boot 的示例 来自 GitHub 的示例代码 https github com spring projects spring boot tree master spring boot samples spring