未调用自定义 AuthenticationProvider

2023-11-24

我想要一个基本的受身份验证保护的 REST 应用程序。我遵循了一般指示http://www.baeldung.com/spring-security-authentication-provider为了让安全工作。

我最终创建了我的实现AuthenticationProvider,但 Spring 永远不会调用它。所有请求都以错误结束:

{"timestamp":1460199213227,"status":401,"error":"Unauthorized","message":"Full authentication is required to access this resource","path":"/test"}

AuthenticationProvider 没有做任何事情。

该应用程序是基于注释的,以下是相关部分:

安全设置

@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
    @Autowired
    CustomAuthenticationProvider authenticationProvider;

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

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authenticationProvider(authenticationProvider)
                .authorizeRequests()
                .anyRequest().authenticated().and().httpBasic();
    }
}

认证提供者

@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
    @Autowired
    private UserDAO userDAO;
    @Autowired
    private Authenticator authenticator;

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        // This never gets called, I checked with debugger
        String username = authentication.getName();
        String password = authentication.getCredentials().toString();

        User user = userDAO.findByUsername(username);
        User authenticatedUser = authenticator.authenticate(user, password);
        if (authenticatedUser == null){
            throw new RESTAuthenticationException("Auth failed");
        }

        List<GrantedAuthority> authorityList = new ArrayList<>();
        return new UsernamePasswordAuthenticationToken(user, authorityList);
    }

    @Override
    public boolean supports(Class<?> aClass) {
        return aClass.equals(UsernamePasswordAuthenticationToken.class);
    }
}

控制器

@RestController
public class UserController {
    @RequestMapping(value = "/test")
    public ResponseEntity test(@AuthenticationPrincipal User user) {
        return ResponseEntity.ok().body(user);
    }
}

您收到状态代码 401 的响应。这是“未经授权”http 状态代码。这可能是由于您的请求中缺少/格式错误的授权标头引起的。

您正在使用Http-Basic:请求中需要以下标头:

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l

字符串在哪里QWxhZGRpbjpPcGVuU2VzYW1l是字符串<user>:<password>Base64 编码。

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

未调用自定义 AuthenticationProvider 的相关文章

随机推荐

  • MySQL 用户定义函数

    我有一个表包含几列 column 1 column 2 和column 3 我将一个新列添加到名为 分数 的表中 我想做的是根据这三列计算分数并轻松调整参数 假设我的分数公式如下所示 score a column 1 b column 2
  • 动态更改 gridview 横轴计数以填充 flutter 中的动态列

    我正在使用 flutter 框架开发 gridview 以实现动态列计数 但没有得到解决方案 我尝试过将 GridView count 和 Gridview builder 与 itembuilder 一起使用 但没有得到预期的结果 任何帮
  • PHP:如何将时间字符串与日期('H:i')进行比较?

    我将时间保存在数据库中 例如晚上 7 30 作为 varchar 字段 我想检查这个时间是否大于现在的时间 我将数据库时间字符串转换为 19 30 现在我想做这样的事情 my time 19 30 if my time gt date H
  • 是否可以在 Chart.js 中生成圆形雷达图?

    当我绘制标准 Chart js 雷达图时 轴是多边形 不是圆形 例如 是否可以将轴做成圆形 像这样 编辑 2021 10 27 Chart js v3已删除scale有利于的选择options scales r 这是使雷达网格呈圆形的更新方
  • 多线程 ViewController 中的 UIWebView

    我在视图控制器中有一个 UIWebView 它有以下两种方法 问题是 如果我在第二个线程完成之前弹出 重新点击导航栏 此控制器 应用程序将在 super dealloc 之后崩溃 因为 尝试从主线程以外的线程获取 Web 锁或Web 线程
  • 调用init方法失败;嵌套异常是 java.lang.IllegalArgumentException:方法公共抽象的查询验证失败

    我正在开发Spring MVC Spring data jpa querydsl我是新手 当我为 querydsl 编写代码时 在该代码工作正常之前 当我添加 querydsl 相关代码时 我开始收到以下错误 不确定出了什么问题 请指导 错
  • 如何为同一个函数设置不同的输入类型?

    我想做的基本想法是 def aFuncion string dicti if len str gt 0 print you gave string as input if len dicti gt 0 print you gave a di
  • 从我的应用程序登录 Facebook 可以在模拟器上运行,但不能在设备上运行

    这是我登录 Facebook 的代码 mLoginButton LoginButton findViewById R id login restore session if one exists SessionStore restore U
  • Firefox 无法正确显示 :before 和 :after 伪元素

    在除 Firefox 之外的所有其他浏览器上 网页看起来都很好 甚至是 Internet Explorer 伪元素漂浮在整个文档中 甚至在第一个元素显示后不显示 这种行为有什么解决办法吗 CSS span property dc date
  • 如何使用 php 编辑/更新 txt 文件

    在我阅读了文件上的编辑 更新功能的很多类似问题并且没有一个起作用之后 我想寻求一些帮助 我正在尝试编辑 txt来自 php ini 的文档我已经尝试过这些事情 这是我在这里阅读的最后一个代码 但它不起作用 data to write POS
  • ARM 汇编器 - 如何使用 CMP、BLT 和 BGT?

    问你们一个简单的问题 在我的循环中 我需要使用 CMP BLT 和 BGT 来比较一些值 如何在下面的循环中使用所述指令 我正在尝试使用 BGT BLT 和 CMP 因为我需要它们来使我的应用程序正常工作 问题是我不知道如何使用它们 如果我
  • 我可以传递 --max-concurrent-downloads 作为标志吗?

    我正在使用较差的互联网连接并尝试拉取并运行图像 我想一次下载一层 每个文档尝试添加一个平面 max concurrent downloads 如下所示 docker run rm p 8787 8787 e PASSWORD blah ma
  • SQLAlchemy 在 select 语句上占用内存

    根据 SQLAlchemy select 语句被视为 for 循环中的可迭代对象 其效果是 返回大量行的 select 语句不会使用过多的内存 我发现 MySQL 表上有以下语句 for row in my connections exec
  • 用于设置 pagefile.sys 大小的 PowerShell 脚本

    如何通过PowerShell设置Windows上页面文件 pagefile sys 的大小 这是我们通过 PowerShell 更新 pagefile sys 大小的方法 PowerShell Script to set the size
  • 比较没有时间成分的 NSDate

    在一个快速的操场上 我一直在使用 NSDate date 但是 它总是附加时间元素出现 对于我的应用程序 我需要忽略时间元素 这在斯威夫特中可能吗 如何做呢 即使我可以将时间元素设置为每个日期的同一时间也可以 另外 我正在尝试比较两个日期
  • 如何在 android Os 4.0 中构建默认浏览器应用程序

    我从以下位置下载了android默认浏览器应用程序的源代码here 并尝试从日食中构建它 它显示不同类中的各种构建错误 主要错误是由于导入造成的 因为它无法选择以下类 import android provider BrowserContr
  • 在 Xcode 6 Beta 4 中放松 Segue

    我一直在尝试向 Xcode 6 中的 swift 应用程序添加展开转场 并且在前三个测试版的发行说明中 它被声明为不受支持 然而 在 Beta 4 中 该错误说明不再存在 我听说人们能够让它发挥作用 但我却没有这样的运气 所以 我的问题是
  • 以编程方式添加自定义设置选项卡以管理 WooCommerce 中的产品数据

    我想以编程方式将设置选项卡添加到产品数据元框 如下所示 Verzendkosten 选项卡是通过 firebug 添加的 这意味着 运费 如何以编程方式在 woocommerce 编辑产品页面设置中添加 Verzendkosten 自定义选
  • 以编程方式呈现 Web UserControl

    我有一大堆UserControl对象 ascx文件 在他们自己的小项目中 然后 我在两个项目中引用该项目 REST API 这是一个类库项目 和主网站 我确信这在网站上很容易 只需使用Controls Add in any Panel或 A
  • 未调用自定义 AuthenticationProvider

    我想要一个基本的受身份验证保护的 REST 应用程序 我遵循了一般指示http www baeldung com spring security authentication provider为了让安全工作 我最终创建了我的实现Authen