Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何正确地向应用程序本身提供身份验证对象(SecurityContext)?_Spring_Spring Security - Fatal编程技术网

Spring 如何正确地向应用程序本身提供身份验证对象(SecurityContext)?

Spring 如何正确地向应用程序本身提供身份验证对象(SecurityContext)?,spring,spring-security,Spring,Spring Security,我的大多数应用程序都使用方法级安全性(AspectJ,但这并不重要),现在我正试图从应用程序本身(不是控制器,而是EventListener)中调用一些代码,我不禁想知道Spring安全性是否提供了一些现成的方式,将身份验证对象赋予应用程序本身,否则,我无法通过我的方法安全性,因为应用程序具有空安全对象(SecurityContext中的身份验证,如果它存在的话——取决于情况,您可能必须首先初始化它) 当然我可以这样做(就在运行相关代码之前): 但在部署中这样做安全吗(安全方面) 是否可以保证

我的大多数应用程序都使用方法级安全性(AspectJ,但这并不重要),现在我正试图从应用程序本身(不是控制器,而是EventListener)中调用一些代码,我不禁想知道Spring安全性是否提供了一些现成的方式,将身份验证对象赋予应用程序本身,否则,我无法通过我的方法安全性,因为应用程序具有空安全对象(SecurityContext中的身份验证,如果它存在的话——取决于情况,您可能必须首先初始化它)

当然我可以这样做(就在运行相关代码之前):

  • 但在部署中这样做安全吗(安全方面)
  • 是否可以保证哪个线程将拥有此SecurityContext?其他线程及其任务如何
  • 一旦设置好,它能保持在那里吗?在应用程序运行的剩余时间内(可能是几天/几个月),上下文可能会被重新加载,等等。我缺乏深入的Spring知识,不知道Spring内部线程会发生什么

你所说的“应用程序有空安全对象”是什么意思?@NatFar好吧,如果你不设置它,就没有SecurityContext(和身份验证)。通常,例如对于http客户端,当客户端通过控制器连接时,这是在http筛选器中完成的。在这里,我想验证的不是http客户机,而是应用程序本身。不同之处在于,当客户端连接时,有一个单独的线程为其会话提供SecurityContext(和身份验证)。对于应用程序,除非您设置它,否则不存在(null)。我的问题是——Spring是否为它提供了更好的挂钩,或者我是否真的像上面那样做了?
UserDetails ud = User.builder()
                .username("APPLICATION")
                .password("APPLICATION")
                .roles("APPLICATION")
                .build();
        Authentication auth = new UsernamePasswordAuthenticationToken(ud, ud.getPassword(), ud.getAuthorities());
        SecurityContextHolder.getContext()
                .setAuthentication(auth);