注意:我的应用程序使用最新版本的 Spring 框架 4.0.6、3.2.4 来保证安全性,并且它不使用 xml 而只使用 Java-Config 来配置应用程序。
我有一组服务,我想通过角色和其他业务特定授权条件来保护它们。这些服务被分组到一个模块(一个 jar)中,供 REST 应用程序和 Web 应用程序使用。我已经有一个AuthenticationProvider
web 应用程序(REST 应用程序处于初始阶段)。我@EnableGlobalMethodSecurity
在网络应用程序中使用。话虽如此,我现在也需要保护服务中的方法。在这种情况下,我是否需要提供另一个身份验证提供程序?或者,将身份验证提供程序移动到服务模块以便 web/rest 应用程序使用服务 jar 中的身份验证提供程序是否正确?如果我@EnableGlobalMethodSecurity
在服务模块的 ApplicationServiceConfig.java 中进行配置,我会得到打击异常。
com.name.mvoice.project.service.ApplicationServiceConfig: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: An AuthenticationManager is required
如果应用程序需要双重身份验证,一个来自 RDBMS,另一个来自 LDAP,我该如何配置安全性。条件应该是用户信息应该在两个系统中都存在并启用。我是否需要在现有的身份验证管理器本身中编写此内容,还是应该为 LDAP 提供单独的身份验证提供程序?如果有怎么办?
WebSecurityConfig.java
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
AuthenticationProvider dbAuthenticationProvider = new DatabaseAuthenticationProvider();
auth.authenticationProvider(dbAuthenticationProvider );
// is it right to do like this
AuthenticationProvider ldapAuthenticationProvider = new LDAPAuthenticationProvider();
auth.authenticationProvider(ldapAuthenticationProvider );
}
不过,我看到AuthenticationManagerBuilder.authenticationProvider
将提供的身份验证提供程序添加到列表中!