我有三个应用程序正在生产中,我试图一次将一个应用程序迁移到Spring-boot 1.5.10。我们使用基本身份验证,用户凭据位于 tomcat-users.xml 文件中(如果应用程序部署在Tomcat中)或 application-users.properties 文件中,如果是Wildfly。我们的配置允许用户进行一次身份验证,而无需在每个应用程序中进行身份验证。
我无法将 web.xml 的一小部分迁移到Java,请参阅下文:
<web-app>
<security-constraint>
<web-resource-collection>
<web-resource-name>All resources</web-resource-name>
<description>Protects all resources</description>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>myRealm</realm-name>
</login-config>
<security-role>
<role-name>*</role-name>
</security-role>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/aviso_page.jsp</location>
</error-page>
</web-app>
这是我尝试在java中配置。我的 WebSecurityConfigurerAdapter 是:
@ComponentScan
@EnableGlobalMethodSecurity(securedEnabled = true)
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired MyAuthProvider myAuthProvider;
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and()
.httpBasic()
.realmName("myRealm")
.and()
.csrf().disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) {
auth.authenticationProvider(myAuthProvider);
}
}
我的 AuthenticationProvider 是:
@Component
public class MyAuthProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) {
UsernamePasswordAuthenticationToken authenticationToken = (UsernamePasswordAuthenticationToken) authentication;
Object login = authenticationToken.getPrincipal();
Object password = authenticationToken.getCredentials();
return new UsernamePasswordAuthenticationToken(login, password);
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
使用此Java配置,我无法使用tomcat-users.xml或application-users.properties进行身份验证,也无法在三个应用程序之间共享身份验证。
那么,我做错了什么?