我正在使用Spring Security 4.0.1,并希望使用多个身份验证提供程序来使用基于Java的配置进行身份验证。如何指定提供者订单?
我希望使用AuthenticationManagerBuilder,因为这是WebSecurityConfigurerAdapter.configureGlobal()
公开的内容,但是我看不到任何指定顺序的方法。我需要手动创建ProviderManager吗?
更新:这是根据Arun的答案进行的问题澄清。我要使用的特定提供程序是ActiveDirectoryLdapAuthenticationProvider
和DaoAuthenticationProvider
,用于自定义UserService
。
最终,我想首先针对DaoAuthenticationProvider
和第二对ActiveDirectoryLdapAuthenticationProvider
进行身份验证。
AD提供程序涉及对AuthenticationManagerBuilder.authenticationProvider()
的调用,而DAO提供程序涉及对AuthenticationManagerBuilder.userService()
的调用,这会在幕后围绕用户服务创建DaoAuthenticationProvider
。查看源代码,它不会直接将提供程序放置在提供程序列表中(它会创建配置程序),因此Arun的答案对我不起作用。
我尝试手动创建DaoAuthenticationProvider
并将其传递给authenticationProvider()
。它并没有影响订单。
参考方案
我在configure方法中尝试了一个objectPostProcessor,它起作用了。不确定这是否是您想要的:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.passwordEncoder(new BCryptPasswordEncoder());
auth.authenticationProvider(new CustomAuthenticationProvider(this.dataSource));
auth.objectPostProcessor(new ObjectPostProcessor<Object>() {
@Override
public <O> O postProcess(O object) {
ProviderManager providerManager = (ProviderManager) object;
Collections.swap(providerManager.getProviders(), 0, 1);
return object;
}
});
}
这是WebSecurityConfigurerAdapter继承的类上的configure方法。
对象后处理器的原因是,我们需要等待AuthenticationManagerBuilder实际构建对象,然后才能访问和更改提供程序列表的顺序。
希望能对您有所帮助。
Spring MVC Web应用程序检测暴力攻击的最佳方法? - javaSpring 3.0 MVC中是否有专门用于帮助检测Web应用程序的身份验证/登录页面上的蛮力攻击的功能? 参考方案 经过长期验证的实践是,如果身份验证失败,则会引入随机但相当大的延迟。这样,合法用户将立即登录,但攻击者每次尝试将花费500ms-1s,这使整个暴力概念不切实际(将永远存在)。合法用户偶尔失败的登录只会使他们稍有延迟,并且不会引起注意。如果需要…
Spring MVC中的输入验证 - java我知道Commons Validator框架是Struts项目在服务器端和客户端验证输入值的事实上的标准。Spring MVC项目是否也是如此?我得到的印象可能不是,大多数Struts书籍和论坛都谈论Commons Validator框架,但是只有少数Spring书籍和论坛可以。在Spring MVC项目中验证输入的最佳实践是什么?干杯! 参考方案 在引入S…
Java:“自动装配”继承与依赖注入 - javaImprove this question 我通常以常见的简单形式使用Spring框架: 控制器服务存储库通常,我会在CommonService类中放一个通用服务,并使所有其他服务扩展到类中。一个开发人员告诉我,最好在每个服务中插入CommonClass而不是使用继承。我的问题是,有一个方法比另一个更好吗? JVM或性能是否会受到另一个影响?更新资料Comm…
Spring Security @Secured批注和用户权限 - java这是关于Spring v.4(MVC +安全性)的。我已经实现了UserDetailsServiceImpl,其中在loadUserByUsername方法内部向用户授予了其权限。说的很简单:public UserDetails loadUserByUsername(String username) { ... Collection<GrantedAu…
春季安全值得付出努力 - java我一直在关注春季安全性,并注意到它是多么大的包装。我想知道是否值得花一些时间来加强这一点。Spring Security 2.0+为您节省了大量时间,还是以任何方式简化了您的项目? java参考方案 几年前,我考虑将其用于Spring项目,并选择了它,因为它是一个非常繁琐的框架,恕我直言,它提供的灵活性不是必需的。 (据我估计)减少我们自己的身份验证/授权的…