使用 Spring Security 进行注册

问题描述 投票:0回答:2

我在 Java 17 中遇到 Spring Security 配置问题。我希望允许对“/api/register”端点进行未经身份验证的访问,同时要求对所有其他端点进行身份验证。这是我当前的配置:

@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests((requests) -> requests.requestMatchers("/api/register").permitAll().
            anyRequest().authenticated());
    http.formLogin(withDefaults());
    http.httpBasic(withDefaults());
    return http.build();
}

我尝试了不同的配置,但仍然不起作用。不幸的是,

antMatchers
方法似乎对我不起作用。在旧版本的 Spring 中,我可以实现这一点。您能帮我确定我当前的设置有什么问题吗?

java spring spring-security registration
2个回答
0
投票

您当前的配置看起来几乎是正确的,但是在authorizeHttpRequests方法中有一个小错误。您应该使用 mvcMatchers 来指定 URL 模式,而不是使用 requestMatchers。这是更正后的配置:

java
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests((requests) -> requests.mvcMatchers("/api/register").permitAll()
            .anyRequest().authenticated());
    http.formLogin(withDefaults());
    http.httpBasic(withDefaults());
    return http.build();
}

此配置应允许对“/api/register”端点进行未经身份验证的访问,同时要求对所有其他端点进行身份验证。


0
投票

由于您没有使用 Spring Security 5 或更高版本,因此 mvcMatchers 方法不可用。在这种情况下,您可以使用 antMatchers 方法来实现所需的行为。这是您的版本的配置:

java
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests((requests) -> requests.antMatchers("/api/register").permitAll()
            .anyRequest().authenticated());
    http.formLogin(withDefaults());
    http.httpBasic(withDefaults());
    return http.build();
}

此配置应允许对“/api/register”端点进行未经身份验证的访问,同时要求对所有其他端点进行身份验证。请注意,建议在 Spring Security 5 及更高版本中使用 mvcMatchers,因为它通过匹配 Spring MVC 用于匹配的相同规则来提供更好的安全性(当使用 @RequestMapping 注释时) 1 。但是,由于您使用的是旧版本,antMatchers 应该适合您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.