我正在研究基于Spring SecurityJava配置。
我已经创建了自己的身份验证提供者(MyAuthenticationProvider),我想在ProviderManager中注册它(AuthenticationManager的单个实例)。
我发现ProviderManager有一个提供者列表,我可以向其中注册我的单个身份验证提供者。
以下是我的配置部分:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(MyAuthenticationProvider);
}
}
我发现AuthenticationManagerBuilder
有父母身份验证管理器
、defaultUserDetailsService
和许多其他字段。
我的问题是:
>
configureGlobal方法的名称并不重要。但是,重要的是仅在使用@EnableWebSecurity、@EnableWebMvcSecurity、@EnableGlobalMethod odSecurity或@EnableGlobalAuthentication注释的类中配置AuthenticationManagerBuilder。否则会产生不可预测的结果。
3的答案:
是的。AuthenticationManagerBuilder的代码添加了您的提供商:
public AuthenticationManagerBuilder authenticationProvider(AuthenticationProvider authenticationProvider) {
this.authenticationProviders.add(authenticationProvider);
return this;
}
4的答案很简单:
这意味着,一旦有了其中一个注释,就可以根据需要命名方法:
@Configuration
@EnableWebSecurity //or @EnableWebMvcSecurity or @EnableGlobalMethodSecurity....
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void myCoolMethodName(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(MyAuthenticationProvider);
}
}
“否则会产生不可预测的结果”
如果保留名称而不保留注释,则可能无法正常工作。
启用Web安全(EnableWebSecurity)由启用全局身份验证(EnableGlobalAuthentication)进行元注释
...
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {
...
和EnableGlobalAuthentication导入AuthenticationConfiguration:
...
@Import(AuthenticationConfiguration.class)
@Configuration
public @interface EnableGlobalAuthentication {
}
在AuthenticationConfiguration中,您将看到声明了一个AuthenticationManagerBuilder bean:
...
@Bean
public AuthenticationManagerBuilder authenticationManagerBuilder(
ObjectPostProcessor<Object> objectPostProcessor, ApplicationContext context) {
...
}
当您在Autowire上安装AuthenticationManagerBuilder时,您将得到一个。您可以使用多种方法轻松配置内存、jdbc、ldap等,。。。身份验证。
背景:
Spring Security Java配置通过几个阶段将您的配置与ApplicationContext无缝结合。这两者结合在一起的一个地方是WebSecurityConfigurerAdapter中的getHttp()方法。
例如,这是一段摘录:
AuthenticationManager authenticationManager = authenticationManager();
authenticationBuilder.parentAuthenticationManager(authenticationManager);
为了让您了解配置顺序的“不简单”,上面的authenticationManager变量将是:
默认情况下,我的意思是会有一些[…]authenticationProviders已在AuthenticationManagerBuilder中注册
如果查看AuthenticationConfiguration,您将看到默认情况下,InitializeUserDetailsBeanManagerConfiguration应用于AuthenticationManagerBuilder bean。只要它在上下文中找到一个UserDetailsService bean,并且没有添加其他提供者,它就会添加一个DaoAuthenticationProvider。这就是为什么在Spring Security参考中,只提供@Bean用户详细信息服务(UserDetailsService)就足够了。
但是,一旦您添加了身份验证提供程序,则不会注册“默认”提供程序。
你知道 Puppet 能做微创手术吗? 通常,我们不希望将整个配置文件交由 Puppet 管理而仅仅是在配置文件中添加某项设置 — 尤其是如果该文件是由别人管理,我们不能覆盖它的情况。 一种简单而有用的方法是,如果配置文件中不存在指定的行就添加这行配置。例如: 添加一个内核模块名到配置文件 /etc/modules 告知内核在启动时加载此模块。 你可以使用一个 exec 资源达成此任务。下面的例子
我有一个当地的库伯内特斯环境,我基本上是复制的。将kube/config文件添加到我的本地文件中,并将“上下文”、“用户”和“集群”信息添加到我当前的“.kube/config”文件中。没关系,我可以连接到本地文件。 但是我想用命令将这些信息添加到我的本地配置文件中。 因此,关于这个页面,我可以使用“证书颁发机构数据”作为参数,如下所示:--- 但它会抛出如上所述的错误。我用的是kubernete
如果我没有在结构中定义构造函数,我可以通过如下方式选择某个值来初始化它: 但是如果我添加新的默认构造函数,那么我就会失去这个功能: 两种方式都有可能吗? 我尝试添加默认构造函数,但似乎也不起作用。
我想向我的kafka集群添加新用户,方法似乎是在zookeeper数据库中添加SCRAM-SHA-512/256配置,但我只知道如何使用命令行实用程序来完成,如下所示: 有没有使用Kafka API for Java的替代方法?
我启用了Swagger open API 3.0,如下所示: 添加了以下依赖项 之后添加了下面的bean进行定制。 一切正常。我可以访问swagger-用户界面和api文档。 但是我有几个使用keycloak OAuth 2.0保护的api。当我试图访问这些安全的api时,我收到了未经授权的错误(这是意料之中的)。我也想从swagger open api 3.0中测试安全的api。 有人能帮我在s
有了Web框架和ORM框架,我们就可以开始装配App了。 通常,一个Web App在运行时都需要读取配置文件,比如数据库的用户名、口令等,在不同的环境中运行时,Web App可以通过读取不同的配置文件来获得正确的配置。 由于Python本身语法简单,完全可以直接用Python源代码来实现配置,而不需要再解析一个单独的.properties或者.yaml等配置文件。 默认的配置文件应该完全符合本地开