我有一个简单的 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());
}
}
希望这有帮助!