【发布时间】:2014-10-27 15:37:47
【问题描述】:
我正在尝试使用 Spring Security java 配置来保护 Web 应用程序。
这是配置的样子:-
@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private String googleClientSecret;
@Autowired
private CustomUserService customUserService;
/*
* (non-Javadoc)
*
* @see org.springframework.security.config.annotation.web.configuration.
* WebSecurityConfigurerAdapter
* #configure(org.springframework.security.config
* .annotation.web.builders.HttpSecurity)
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/","/static/**", "/resources/**","/resources/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic().disable()
.requiresChannel().anyRequest().requiresSecure();
// @formatter:on
super.configure(http);
}
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
// @formatter:off
auth
.eraseCredentials(true)
.userDetailsService(customUserService);
// @formatter:on
super.configure(auth);
}
}
请注意,我已使用以下命令明确禁用 HTTP Basic 身份验证:-
.httpBasic().disable()
在访问安全 URL 时,我仍然收到 HTTP Authenticaton 提示框。为什么?
请帮我解决这个问题。 我只想呈现捆绑的默认登录表单。
Spring Boot Starter 版本:1.1.5 Spring 安全版本:3.2.5
谢谢
【问题讨论】:
-
将
security.basic.enabled=false添加到您的application.properties。此外,您不应该从覆盖的方法中调用super.configure。 -
@M.Deinum 修复了它。但是为什么我在 java config 中明确禁用时它没有被禁用?
-
您可以有多个
WebSecurityConfigurer,每个配置对整体配置都有贡献。很可能您的网站的其余部分受到基本身份验证和带有表单的普通网站的保护。您可以创建 2 个WebSecurityConfigurer一个用于休息,一个用于形式。您可能还想查看docs.spring.io/spring-boot/docs/current/reference/html/…(Spring Boot 参考,安全部分)。 -
@M.Deinum 你不需要在 *Configurer 类中调用原始实现,它们只是用一个空的主体实现接口的所有方法,所以你可以覆盖你想要的使用。
-
我遇到了类似的问题,
security.basic.enabled=false不再可用。任何其他解决方案。 @M.Deinum
标签: spring-security spring-boot spring-java-config