将Spring Web应用程序(web.xml)迁移到Spring-boot 1.5.10

时间:2018-03-16 01:22:51

标签: java spring authentication spring-boot web.xml

我有三个应用程序正在生产中,我试图一次将一个应用程序迁移到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进行身份验证,也无法在三个应用程序之间共享身份验证。

那么,我做错了什么?

0 个答案:

没有答案