尝试将 Spring 安全性与可选的 x509 客户端证书一起使用



我有一个简单的 spring 启动应用程序,具有 SSL 和 x509 客户端证书的 spring 安全性。

我想在开发模式下仅使用 http 而不使用客户端证书运行它。以及使用 https 和 x509 证书的生产模式。

我有运行安全站点OK的简单演示应用程序。https://coling01@bitbucket.org/coling01/ssldemo.git

使用证书访问安全站点工作正常a( curl --cacert server.pem --cert client1.p12:changeit https://localhost:8443/demo

我希望能够切换到不安全模式并点击它b( 端口 80 上的 http 不带证书(我确实有端口 8080 正在运行,它响应但遇到错误,试图检查未传递的客户端证书(

有什么想法吗?我希望会有一个简单的开关来禁用客户端身份验证,但找不到这个。

按照Mkyong的例子使用Spring Profile。有了它,您可以创建 2 种不同的WebSecurityConfigurerAdapter

第一个用于dev配置文件:

@Profile("dev")
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class DevSecurityConfiguration extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .anyRequest().permitAll();
  }
}

第二个生产准备就绪并得到保障:

@Profile("prod")
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ProductionSecurityConfiguration extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .anyRequest().authenticated()
        .and()
        .x509()
        .subjectPrincipalRegex("CN=(.*?)(?:,|$)")
        .userDetailsService(userDetailsService());
  }
}

希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新