AuthenticationCredentialsNotFoundException:在安全上下文中找不到身份验证对象

2023-11-23

当我尝试将 JSON 有效负载从 Chrome 浏览器的 POSTMAN 插件发送到作为 REST URL 公开的控制器时,出现以下错误 -http://localhost:8080/services/account/create

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/services] threw exception [Request processing failed; nested exception is org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext] with root cause
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:339)
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:198)
    at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:60)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
    at com.webadvisors.controller.HotelRestController$$EnhancerBySpringCGLIB$$e9f80d9.createHotel(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)

我选择 BasicAuth 作为授权类型,并在将 JSON 负载发送到 POSTMAN 中的 REST URL 时输入用户名和密码。

1)控制器类

@RestController
public class AccountRestController {

    @Autowired
    private AccountService accountService;

    @PreAuthorize("hasAnyRole('ADMINISTRATOR')")
    @RequestMapping(value= "/acc/create", method=RequestMethod.POST)
    public HotelDTO createHotel(@RequestBody AccountDTO accDTO) throws Exception{
        return accountService.create(accDTO);
    }
} 

2)安全配置类

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
@ComponentScan(basePackages = "com.freelance", scopedProxy = ScopedProxyMode.INTERFACES)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    @Qualifier("authenticationService")
    private UserDetailsService userDetailsService;

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

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
       http
                .authorizeRequests()
                .antMatchers("/user/**").permitAll()
                .anyRequest().fullyAuthenticated();
        http.httpBasic();
        http.csrf().disable();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService);
        authenticationProvider.setPasswordEncoder(passwordEncoder());
        return authenticationProvider;
    }
}

3)Spring安全依赖

<dependency>
    <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>3.2.3.RELEASE</version>
   </dependency>
   <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>3.2.3.RELEASE</version>
</dependency>

我正在 POSTMAN 中发送身份验证凭据。但为什么我会收到上述异常。


您创建了一个springSecurityFilterChain with WebSecurityConfigurerAdapter, see Spring安全参考:

第一步是创建 Spring Security Java 配置。该配置创建了一个 Servlet 过滤器,称为springSecurityFilterChain它负责应用程序中的所有安全性(保护应用程序 URL、验证提交的用户名和密码、重定向到登录表单等)。

但你没有使用它(它不在你的堆栈跟踪中)。

你必须注册springSecurityFilterChain。如果您有 Servlet 3.0+ 环境,请参阅Spring安全参考:

使用 Spring MVC 的 AbstractSecurityWebApplicationInitializer

如果我们在应用程序的其他地方使用 Spring,我们可能已经有了一个WebApplicationInitializer这正在加载我们的 Spring 配置。如果我们使用以前的配置,我们会得到一个错误。相反,我们应该向现有的 Spring Security 注册ApplicationContext。例如,如果我们使用 Spring MVCSecurityWebApplicationInitializer看起来像下面这样:

import org.springframework.security.web.context.*;

public class SecurityWebApplicationInitializer
  extends AbstractSecurityWebApplicationInitializer {

}

这只会为应用程序中的每个 URL 注册 springSecurityFilterChain 过滤器。之后我们将确保WebSecurityConfig已加载到我们现有的 ApplicationInitializer 中。例如,如果我们使用 Spring MVC,它将被添加到getRootConfigClasses()

public class MvcWebApplicationInitializer extends
      AbstractAnnotationConfigDispatcherServletInitializer {

  @Override
  protected Class<?>[] getRootConfigClasses() {
      return new Class[] { WebSecurityConfig.class };
  }

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

AuthenticationCredentialsNotFoundException:在安全上下文中找不到身份验证对象 的相关文章

  • Android:Realm + Retrofit 2 + Gson

    我使用时遇到问题Retrofit Gson and Realm 我知道这三个库的组合存在问题 一些答案建议设置一个ExclusionStrategy for Gson可以解决这个问题 我也尝试过 但是没有成功 我的代码如下所示 public
  • 性能 - Spring Boot - 服务器响应时间

    我的 Spring Boot 应用程序有一个奇怪的行为 前端 客户端 角度 6 后端 spring boot spring MVC 嵌入式tomcat Linux 重新启动后端后 第一次调用控制器需要大约 5 秒 以下相同的请求只需要 50
  • Autowired 属性为 null - Spring Boot 配置

    我被自动装配属性中的空值所困扰 我希望我能得到一些帮助 我们在项目中使用 spring boot 版本 0 5 0 M6 四个带有bean的配置文件在一个包中 并按 区域 排序 数据源配置 全局方法安全配置 当我们使用 Spring ACL
  • Java中遍历所有文件

    我想让我的程序打印我计算机上所有文件的巨大列表 我的问题是 当我希望它打印位于我的计算机上的所有文件时 它仅打印第一个硬盘驱动器的第一个文件夹中的文件 有什么想法我在这里做错了什么吗 谢谢 这是我使用的代码 Main import java
  • FOP apache - 支持希伯来字母

    过去几天我一直在调查 FOP apache 中对希伯来字母的支持 用于生成 PDF 文件的项目 我看到以前有一个问题 我不太明白是否解决了 如果有支持 有人可以向我展示 重定向到简单的示例 为我提供带有希伯来字母的 XSL FO 文件 当使
  • Android update 17 似乎与外部 Jars 不兼容

    我刚刚允许我的 Mac 对其 Java 安装进行更新 现在我的一些旧罐子 例如javax mail and apache commons httpclient 正在投掷 找不到类 运行时异常 意思是 它们编译得很好 但在运行时崩溃 出现如下
  • 将 for 循环转换为 concat String 为 lambda 表达式

    我有以下 for 循环 它迭代字符串列表并将每个单词的第一个字符存储在StringBuilder 我想知道如何将其转换为 lambda 表达式 StringBuilder chars new StringBuilder for String
  • 如何使用appium和java在Android中向下滚动以单击元素?

    我想知道如何使用appium和java向下滚动以单击Android中的元素 我里面有一个元素列表 android support v7 widget RecyclerView由于它有10多个元素 所以我们需要滑动屏幕才能看到下面的元素 每个
  • 从java管理unix进程的最佳方法是什么?

    我正在寻找一些简单的任务 例如列出用户的所有正在运行的进程 或者通过pid等杀死特定进程 来自Java的基本unix进程管理 有没有相对成熟且有文档的库 我可以从 JVM 运行外部命令 然后解析标准输出 错误 但这似乎需要大量工作 而且一点
  • 正则表达式忽略引号之间的文本

    我有一个正则表达式 它是 s 这用于分割字符串 但我不想让它分开 如果它在引号中 我不会使用 split 而是使用 Pattern 和 Matcher A demo import java util regex Matcher import
  • 在“Java Web 服务教程”之后找不到 taskdef 类 com.sun.tools.ws.ant.WsImport

    我在许多不同的地方看到了同样的问题 即使经过大量谷歌搜索 我也无法解决它 我想做的 更大的图景 是经历Java Web 服务教程 http download oracle com docs cd E17802 01 webservices
  • JOOQ初始化DAO最佳方法

    我想知道初始化 JOOQ 生成 DAO 的最佳实践 现在 我使用以下方法来初始化 JOOQ 生成的 DAO 在以下情况下 Student Dao 是 JOOQ 生成的 public class ExtendedStudentDAO exte
  • java中应用程序的CPU核心数和线程数之间有什么关系?

    我是java新手多线程编程 我想到的问题是 根据我的数量 我可以运行多少个线程CPU核心数 如果我运行的线程超过CPU核心数机器运行应用程序会产生开销吗 例如 当我们有一台服务器计算机 其中有一个运行 2 个线程 主线程 开发人员线程 的服
  • jSoup 检查跨度类是否存在

    我有一个具有以下格式的 HTML
  • Scala - InvalidClassException:没有有效的构造函数

    我创建了一个Serializable番石榴的版本ImmutableRangeMap and Builder在 Scala 中以便在我的 Spark 应用程序中使用 我的构造函数中有一个零参数SerializableImmutableRang
  • Java错误:线程“main”中出现异常java.lang.ArrayIndexOutOfBoundsException

    我是 Java 初学者 正在学习该课程算法 由普林斯顿大学提供 我按照书上的例子 二分查找在第 9 页 import edu princeton cs algs4 import java util Arrays public class B
  • 我在这个正则表达式中做错了什么?

    我正在做一个关于正则表达式的学校作业 我先解释一下 我必须编写一个正则表达式来检查 URL 我必须检查的条件是 URL 是 http s 还是 ftp s 域名是 nl 还是 edu 至少有一个第三级域名 但如果该域名以 万维网 必须有一个
  • Java客户端找不到主节点:MasterNotDiscoveredException等待[1m]

    我正在使用 vagrant 并使用 debian 软件包在其上安装了 ES elasticsearch 1 1 1 deb 在我的网络应用程序中 我使用 jar org elasticsearch elasticsearch 1 1 1 我
  • org.openqa.selenium.remote.service.DriverService$Builder.createArgs()Lcom/google/common/collect/ImmutableList;使用 Selenium 3.5.3

    我正在使用 IntelliJ 编写 Selenium Junit 测试 如果我直接从测试触发 测试运行正常 但是 如果我使用 JunitCore 触发 TestRunnerSuite 的测试 我遇到了以下奇怪的错误 在谷歌研究后我没有找到解
  • 使用Java 8开发的程序可以在Java 7上运行吗?

    我有点困惑 Oracle 表示 Java 8 与 Java 7 向后 高度兼容 但是 Java 8 程序有什么可能性可以在 Java 7 上成功运行 SE EE 呢 如果第一点为真 Java 8 应用程序将在 Java 7 服务器支持上部署

随机推荐

  • 如何将 JavaScript 变量“输出”到 HTML div 中

    我有一个 JavaScript 变量 我希望 HTML div 输出 7 我知道这很简单 但我似乎无法理解这一点 div Have 7 output here div 为 div 指定一个特定的 id 例如 div div 现在使用以下 J
  • 向上导航(操作栏的后箭头)不适用于片段

    我将抽屉布局作为我的活动的基本布局 并且我正在替换此抽屉布局内框架上的两个片段 第一个片段不会添加到片段的返回堆栈中 我在我的活动中显示汉堡包图标 我也希望在我的第一个片段中显示抽屉菜单 在第二个片段中 我禁用了汉堡包图标mActionBa
  • 是否可以使用输入值属性作为 CSS 选择器?

    是否可以使用 CSS 选择器来定位具有特定值的输入 示例 如何根据以下内容定位以下输入value United States
  • 使用 py2exe 捆绑 GTK 资源

    我正在使用 Python 2 6 和 PyGTK 2 22 6一体化安装程序在 Windows XP 上 尝试构建一个单文件可执行文件 通过py2exe 对于我的应用程序 我的问题是 当我将我的应用程序作为脚本运行时 即未内置到 exe文件
  • 当 C 预处理器宏定义两次时会发生什么?

    我定义了一个宏两次 如下所示 define a 2 define a 3 我认为任何发生a代码中将替换为2 什么时候 define a 3遇到了就没有了a代码中的 s 可以替换为3 所以2将优先 但是当我执行它的时候a被替换为3 为什么 如
  • 当我使用 XmlSerializer 反序列化时,为什么我的 DbNull 不是单例?

    我一直认为 DbNull value 是一个单例 因此你可以这样做 VB NET If someObject Is DbNull Value Then End if C If someObject DbNull Value 但最近 我使用
  • Azure 数据工厂和 SharePoint

    我有一些 Excel 文件存储在 SharePoint Online 中 我想要将 SharePoint 文件夹中存储的文件复制到 Azure Blob 存储 为了实现这一目标 我使用 Azure 门户在 Azure 数据工厂中创建一个新管
  • 写入RenderTarget后,如何高效克隆输出?

    XNA菜鸟在这里 每天都在学习 我刚刚弄清楚如何使用 RenderTarget2D 将多个纹理合成为一个 然而 虽然我可以将 RenderTarget2D 用作 Texture2D 来满足大多数用途 但有一个关键的区别 当调整后缓冲区大小时
  • Java GUI:文档对象模型

    HTML 有一个文档对象模型 Javascript 可以对其进行操作 移动 当我在 Swing 中创建 GUI 时 模型似乎非常不同 我不知道模型的名称 因为我正在创建布局管理器 并将对象粘贴在其中 我的问题 有没有办法以类似 DOM 的方
  • Safari 不发送“If-Modified-Since”和“If-None-Match”标头

    我正在使用 PHP 生成动态内容 我发送以下 HTTP 标头 HTTP 1 1 304 Not Modified Date Sun 09 Dec 2012 17 24 41 GMT Server Apache Connection keep
  • 规范表示是什么意思及其对网站的潜在漏洞

    我在谷歌上搜索了规范表示的含义 发现了一些非常神秘的文档 任何人都可以快速解释规范表示以及网站中针对规范表示攻击的一些典型漏洞是什么 规范化是获取输入 例如文件名或字符串 并将其转换为标准表示形式的过程 例如 如果您的 Web 应用程序仅允
  • Html.BeginForm 使用 FormMethod.GET 丢失了 RouteValues

    我注意到了什么Html BeginForm 提供的方法编码路线值 into actionFORM 标签的属性 这与 POST 方法配合得很好 但如果方法是 GET 则操作 URL 中的所有参数都会被浏览器删除 在 IE8 和 Firefox
  • 茉莉花期望(resultCode).toBe(200或409)

    对于某些测试场景 我需要针对多个值进行测试 这些值都可以 我想做的是如下 expect resultCode toBeIn 200 409 该规范应该在以下情况下通过 resultCode或者是200 or 409 那可能吗 ADDED感谢
  • 如何从 SQLite 文件恢复 Firefox 书签文件?

    我成功地从 Windows XP 下安装的 Firefox 中恢复了两个文件 第一个是 urlclassifier3 sqlite 第二个是 urlclassifier pset 据我了解 这些文件包含在用户配置文件下安装 Firefox
  • 我应该返回 List 还是 ArrayList?

    我发现自己同意返回一个接口而不是一个具体的类 原因很简单 我想要松耦合 但还会有其他影响或权衡吗 最好返回适合您的界面的最通用类型 如果有什么原因的话ArrayList本质上适合您返回的数据 那么您应该使用它 通常List很好 但你也可以考
  • Firebase 屏幕名称显示未设置

    我创建了一个项目Google Firebase Analytics我可以在控制台中记录屏幕名称 但对于一个屏幕screen view未记录 显示为not set在屏幕视图列表中 我使用了默认函数来记录屏幕视图事件 即 setCurrentS
  • 使用 python 在 2D 列表中搜索以查找 x,y 位置

    我有二维列表 我需要搜索元素的索引 由于我是编程新手 因此我使用了以下函数 def in list c for i in xrange 0 no classes if c in classes i return i return 1 这里的
  • 如何使用 NSNumberFormatter 在 UITextField 中打印货币

    我是这里的N00b 我这样打印我的货币 IBAction buttonPressed1 id sender double currency Amount1 text doubleValue Amount2 text doubleValue
  • KeyCloak 将用户管理限制到某些组,同时启用“管理用户”

    使用 KeyCloak 管理控制台 我尝试制定以下用例 我们有X组和Y组 角色 Group X Admin 可以执行以下操作 可以创建没有组的用户 可以将没有组的用户分配到组 X 可以编辑和管理X组中的用户 无法查看 编辑 管理 Y 组中的
  • AuthenticationCredentialsNotFoundException:在安全上下文中找不到身份验证对象

    当我尝试将 JSON 有效负载从 Chrome 浏览器的 POSTMAN 插件发送到作为 REST URL 公开的控制器时 出现以下错误 http localhost 8080 services account create SEVERE