当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Security禁用特定URL的Web安全性

黄宏旷
2023-03-14

我将Spring security用于包含一组Restful服务的Spring启动应用程序。我已经通过基本身份验证启用了网络安全。我希望启用基本的身份验证,除了以特定模式结尾的特定API URL。(例如,healthcheck API,如:/application/_healthcheck)

代码如下所示:

@Configuration
@EnableWebSecurity
public class ApplicationWebSecurityConfigurer extends WebSecurityConfigurerAdapter {

    @Autowired
    private AuthenticationEntryPoint authEntryPoint;

    @Value("${application.security.authentication.username}")
    private String username;

    @Value("${application.security.authentication.password}")
    private String password;

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .anyRequest().authenticated()
                .and().httpBasic()
                .authenticationEntryPoint(authEntryPoint);
    }

    @Autowired
    public void configureGlobal(final AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser(username).password(password).roles("USER");
    }

    @Override
    public void configure(final WebSecurity web) throws Exception {
        web.ignoring().antMatchers("*/_healthcheck");
    }
}

然而,每当我调用/应用程序/_HealthCheckURL,浏览器总是提示我输入凭据。

或者,我甚至试图从Spring boot的应用程序中忽略这个路径。属性(删除了web.ignering()的configure方法。antMatchers(“*/_healthcheck”)),但仍然无法摆脱此endpoint的身份验证

security.ignored=/_healthcheck,*/_healthcheck

共有3个答案

岳风畔
2023-03-14

试试这个。这将跳过健康URL的身份验证部分。

@Override
protected void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("*/_healthcheck").permitAll() // added this line
                .anyRequest().authenticated()
                .and().httpBasic()
                .authenticationEntryPoint(authEntryPoint);
}
秦皓君
2023-03-14
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/application/_healthcheck");
}

上面的示例和您的代码的区别是使用webover超文本传输协议。尝试使用web,看看它是否工作{实际上它应该:)}。

潘翊歌
2023-03-14

您可以创建一个权限列表,并使用它来禁用安全性。

List<String> permitAllEndpointList = Arrays.asList(
            AUTHENTICATION_URL,
            REFRESH_TOKEN_URL,
            EXTERNAL_AUTH_URL,
            "/swagger-resources",
            "/swagger-resources/**",
            "/swagger-ui.html"
);

然后将此语句添加到HttpSecurity对象中

.and()
.authorizeRequests()
.antMatchers(permitAllEndpointList.toArray(new String[permitAllEndpointList.size()]))
.permitAll()

这将解决你的问题。

 类似资料:
  • 问题内容: 我正在使用无状态Spring Security,但是如果要注册,我想禁用Spring Security。我禁用了 但它不起作用,我在下面收到错误消息: 我认为这意味着弹簧安全过滤器正在工作 我的网址顺序始终为“ / api / v1” 我的spring配置是 我的身份验证过滤器是 我的控制器是 我怎么做? 问题答案: 使用它意味着每个经过身份验证的用户,但是你禁用了匿名访问,因此将无法

  • 我开发了一些Rest应用程序,但Spring安全配置存在问题。 在我的Rest应用程序中,帮我处理一下Spring Security 4的xml配置。 当我发送用户名时 这是我的网络.xml: http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 更新 1: 这是我发送请求时的日志:

  • 我的控制器是 我对Spring完全陌生,请帮帮我怎么做?

  • Csrf筛选器验证从“验证”提交的Csrf令牌,当我从HTTP向https提交请求时,抛出无效令牌异常(403)。如何在这种情况下禁用csrf令牌身份验证?

  • 当我使用security.basic.enabled=false在具有以下依赖项的Spring Boot项目上禁用安全性时: 为了修复此异常,我必须添加属性-management.security.enabled=false。我的理解是,当执行器在类路径中时,应该将security.basic.enabled=false和management.security.enabled=false设置为禁用